如果您查看标准,您会发现它们确实支持C11和C99。但是如果您尝试在不指定标准的情况下编译代码,则GCC仍将使用C89/C90。
这背后的原因是什么呢?
我的意思是,通常情况下,当新的语言标准发布时,编译器都会遵循新规则。为什么gcc编译器的行为不同呢?
这背后的原因是什么呢?
我的意思是,通常情况下,当新的语言标准发布时,编译器都会遵循新规则。为什么gcc编译器的行为不同呢?
99.99%的C90编写的代码可以在C99编译器下完美编译,但并非全部。
由于GCC实际上是Unix安装的支柱,并且默认情况下认为新的编译器不会破坏旧软件,因此绝对的向后兼容性是最重要的。
对于新软件来说,明确指定C99比回过头去审计所有旧软件并确定哪些部分需要明确保留为C90更容易。
CFLAGS
中愚蠢的 -Werror
可能在编译器作者添加新警告时失效、对文件系统布局的假设等问题,通常至少需要微调一些内容。 - R.. GitHub STOP HELPING ICE
-std=gnu90
;这意味着在未来的某个版本中将更改为-std=gnu11
。不过我不会抱太大希望——它曾经也是关于gnu99
的同样说法... - Christoph