131得票3回答
以下程序在C89模式下编译输出"C89",在C99模式下编译输出"C99",原因是什么?

我在网上找到了这个C程序:#include <stdio.h> int main(){ printf("C%d\n",(int)(90-(-4.5//**/ -4.5))); return 0; } 这个程序有趣的地方在于,当以C89模式编译和运行时,...

24得票4回答
(void)var实际上是什么意思?

请考虑以下main()函数:int main(int argc, char *argv[]) { return (0); } 使用cc -Wall -Wextra编译时,会生成警告信息“unused parameter”。 当我在函数中不需要使用参数时(例如在int参数没有被使用的信号...

15得票2回答
严格符合 C90 标准的 GCC 选项是什么?

我正在尝试找到测试严格C90符合性时使用的gcc标志组合。根据之前的帖子:GCC options for strictest C code?,我只需要一个--std=c90。 然而,这是我尝试过的: $ cat t.c #include <stdint.h> /* added ...

22得票3回答
如何使用make和编译成C99?

我正在尝试使用Makefile编译一个Linux内核模块:obj-m += main.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modul...

8得票2回答
如何在C89中获得SIZE_MAX

我正在尝试在C89中获取SIZE_MAX。 我想到了以下寻找SIZE_MAX的方法: const size_t SIZE_MAX = -1; 由于标准(§6.2.1.2 ANSI C)规定: 将有符号整数转换为相等或更大的无符号整数时,如果有符号整数的值为非负数,则其值不变。否则,...

25得票2回答
如何使用GCC编译适用于独立环境的代码?

我正在处理的代码应该可以在托管和独立环境下构建,对于后者,需要为某些stdlib函数提供私有实现。 只使用普通的工作站/构建服务器上的GCC,我能否可靠地测试这一点?使用GCC编译自由环境 - "-ffreestanding"选项看起来很有前途,但似乎它只禁用了内置函数并正确设置了STDC...

16得票3回答
将int指针转换为char指针,反之亦然

问题很简单。据我所知,在32位环境中,GCC认为char将按字节对齐,int将按4字节对齐。我也知道C99标准6.3.2.3规定,指针类型之间的强制转换导致未定义的操作。其他C标准对此有什么说法?这里还有许多经验丰富的编程人员——任何观点都将不胜感激。int *iptr1, *iptr2; c...

16得票2回答
ANSI C和ISO C有什么区别?

我知道C语言有ANSI标准和ISO标准,这两个标准有什么区别吗?如果有,是什么?如果没有区别,那么为什么需要两个标准?

97得票29回答
在嵌入式开发中,使用C语言而不是C++是否有任何理由?

问题 我在我的硬件上有两个编译器,分别是C++和C89。 我正在考虑使用带类但不使用多态性(以避免虚函数表)的C++。 我想使用C++的主要原因是: 我更喜欢使用“inline”函数而不是宏定义。 我想使用名称空间来避免代码混乱。 我认为C++更加类型安全,主要是因为有模板和详细的强制...

20得票4回答
509个字符限制的原因解释

我见过许多 ANSI C 编译器必须支持的最低要求,例如函数最多支持 31 个参数,大多数数字似乎都有一定的道理。 然而,我无法理解至少需要支持源代码行中的 509 个字符的原因。511 或者 512 更合理,但是 509 似乎有点武断。 这个数字的原因是什么?