Questions tagged «c»

C是用于系统编程(OS和嵌入式),库,游戏和跨平台的通用编程语言。该标记应与ISO 9899标准(除非另有说明,最新版本9899:2018中定义的有关C语言的一般问题)一起使用-还要使用c89,c99,c11等标记特定于版本的请求。C与C ++截然不同,在没有合理理由的情况下,不应将其与C ++标记结合使用。

8
C中的char数组和char指针有什么区别?
我试图理解C中的指针,但目前对以下内容感到困惑: char *p = "hello" 这是一个从h开始指向字符数组的char指针。 char p[] = "hello" 这是一个存储hello的数组。 将这两个变量都传递给此函数有什么区别? void printSomething(char *p) { printf("p: %s",p); }
216 c  arrays  pointers 

30
为什么程序不是更经常用Assembly编写的?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 主流的观点似乎是:汇编语言比诸如C的高级语言花费的时间更长,并且编程起来更困难。因此,出于这些原因,似乎建议或假定最好使用高级语言编写并且出于更好的可移植性。 最近,我一直在写x86汇编语言,这使我意识到,也许这些原因并不是真的,除了可移植性。也许更多的是熟悉和知道如何编写汇编。我还注意到,汇编语言编程与HLL编程完全不同。也许一个优秀且经验丰富的汇编程序员可以像使用C语言编写经验丰富的C程序员一样轻松快捷地编写程序。 也许是因为汇编编程与HLL完全不同,并且需要不同的思维,方法和方式,这使得对于不熟悉的编程变得很尴尬,因此给它起了不好的名字来编写程序。 如果可移植性不是问题,那么,对于像NASM这样的优秀汇编程序,C真的有什么呢? 编辑: 只是指出。当您使用汇编语言编写时,您不必只编写指令代码。您可以使用宏和过程以及您自己的约定来进行各种抽象,以使程序更具模块化,更可维护且更易于阅读。这是熟悉如何编写良好汇编的地方。

3
为什么函数指针定义可以使用任意数量的“&”或星号“ *”?
为什么要进行以下工作? void foo() { cout << "Foo to you too!\n"; }; int main() { void (*p1_foo)() = foo; void (*p2_foo)() = *foo; void (*p3_foo)() = &foo; void (*p4_foo)() = *&foo; void (*p5_foo)() = &*foo; void (*p6_foo)() = **foo; void (*p7_foo)() = **********************foo; (*p1_foo)(); (*p2_foo)(); (*p3_foo)(); (*p4_foo)(); (*p5_foo)(); (*p6_foo)(); (*p7_foo)(); }
216 c++  c  function-pointers 




4
osx上的.so和.dylib有什么区别?
.dylib是OSX上的动态库扩展,但是当我不能/不应该使用传统的unix .so共享库时,对我来说还不清楚。 我有一些问题: 从概念上讲,.so和.dylib之间的主要区别是什么? 什么时候可以/应该在另一个上使用? 编译技巧和窍门(例如,替换gcc -shared -fPIC,因为它在osx上不起作用)
214 c++  c  macos  unix 

8
关闭与关机套接字?
在C语言中,我了解到,如果我们关闭一个套接字,则意味着该套接字将被销毁,以后可以重新使用。 如何关机?描述说关闭了与该套接字的双工连接的一半。但是那个套接字会像close系统调用一样被销毁吗?
214 c  sockets  networking 

10
静态const vs #define
使用static constvars比使用#define预处理器更好吗?还是取决于上下文? 每种方法的优点/缺点是什么?
212 c++  c  const 

24
保护可执行文件免受逆向工程?
我一直在考虑如何保护我的C / C ++代码免于反汇编和逆向工程。通常,我永远不会在自己的代码中宽恕这种行为。但是,为了所有人的安全,我目前正在研究的当前协议绝不能被检查或理解。 现在,这对我来说是一个新主题,互联网对于预防逆向工程并不是真正有用的资源,而是描述了大量有关如何进行逆向工程的信息 到目前为止,我想到的一些事情是: 代码注入(在实际函数调用之前和之后调用伪函数) 代码混淆(破坏二进制文件的反汇编) 编写我自己的启动例程(调试器很难绑定到) void startup(); int _start() { startup( ); exit (0) } void startup() { /* code here */ } 运行时检查调试器(如果检测到,则强制退出) 功能蹦床 void trampoline(void (*fnptr)(), bool ping = false) { if(ping) fnptr(); else trampoline(fnptr, true); } 没有意义的分配和释放(堆栈变化很多) 无意义的虚拟呼叫和蹦床(拆卸输出中的大量跳跃) 吨铸件(用于模糊拆卸) 我的意思是,这是我想到的一些事情,但是在适当的时间范围内,代码分析人员可以解决所有这些问题,或者可以由代码分析人员弄清楚这些问题。我还有别的选择吗?
210 c++  c  obfuscation  assembly 

30
是否有Windows的Valgrind替代品?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 当我发现Valgrind仅适用于Linux时,我正在研究Valgrind,以帮助改善C编码/调试-我对将OS迁移至Linux没有其他需求或兴趣,因此我想知道是否有同样好的Windows程序。


6
typedef定长数组
我必须定义一个24位数据char[3]类型。我用来表示这种类型。我可以的typedef char[3]来type24?我在代码示例中尝试过。我放入typedef char[3] type24;了头文件。编译器没有对此抱怨。但是,当我void foo(type24 val) {}在C文件中定义一个函数时,它确实抱怨了。我希望能够定义类似type24_to_int32(type24 val)而不是的函数type24_to_int32(char value[3])。
210 c  arrays  gcc  typedef 


24
父母退出后如何使子进程死亡?
假设我有一个进程,它恰好产生了一个子进程。现在,当父进程出于某种原因(正常或异常,通过kill,^ C,断言失败或其他任何原因)退出时,我希望子进程死亡。如何正确地做到这一点? 一些关于stackoverflow的类似问题: (如前所述)当父进程退出时,如何导致子进程退出? (稍后询问)在杀死父进程时,是否会自动杀死使用fork()创建的子进程? 有关Windows的 stackoverflow的一些类似问题: 如何在Windows中自动销毁子进程? 当父进程被杀死时杀死子进程
209 c  linux  unix  process  fork 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.