我在Ubuntu 9.04 64位上使用GCC 4.3.3,并且在C代码中使用C ++风格的注释会出错。当我在标题中说“默认”时,我的意思是简单地调用gcc test.c
根据GCC 4.3.3文档(here),这是支持的......但我仍然得到了错误。
这些错误消失了,我的编译字符串添加了一个简单的-std = c99,所以我的问题就解决了。很奇怪,如果有任何海湾合作委员会专家对此有解释,因为在我看来,这与文件明显矛盾。
#include <stdio.h>
// this is a comment
int main( void )
{
return 0;
}
答案 0 :(得分:5)
Ubuntu可能会覆盖默认值which should be gnu89。当然,我不能用我的GCC 4.3副本(在Debian上)得到它。
% echo '// foo' | gcc-4.3 -x c -c -
% echo '// foo' | gcc-4.3 -std=gnu89 -x c -c -
% echo '// foo' | gcc-4.3 -std=c89 -x c -c -
<stdin>:1: error: expected identifier or '(' before '/' token
答案 1 :(得分:4)
来自 http://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards
默认情况下,如果没有C语言方言 给出了选项,是-std = gnu89
// comments
-std=gnu89
答案 2 :(得分:3)
通过defualt GCC使用带有GCC扩展的C89 / 90标准。严格来说,默认情况下它并不遵守任何特定标准,因为默认情况下,在标准要求此类消息的情况下,它不会发出任何诊断消息。您需要在-ansi -pedantic
模式下运行gcc(可能还有-Wall
)才能使其符合标准。在这种情况下,你将再次拥有C89 / 90。