1

我在 Ubuntu 9.04 64 位上使用 GCC 4.3.3,并且在 C 代码中使用 C++ 样式的注释时遇到错误。当我在标题中说“默认情况下”时,我的意思是简单地调用gcc test.c

根据 GCC 4.3.3 文档(此处),这是受支持的......但我还是得到了错误。

这些错误在我的编译字符串中添加了一个简单的 -std=c99 就消失了,所以我的问题得到了解决。好奇是否有任何 GCC 专家对此有解释,因为在我看来这与文档明显矛盾。

#include <stdio.h>
// this is a comment

int main( void )
{
   return 0;
}
4

3 回答 3

5

Ubuntu 可能会覆盖默认值,它应该是 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
于 2009-11-01T17:01:03.457 回答
4

引用自http://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards

如果没有给出 C 语言方言选项,则默认值为 -std=gnu89

并被// comments认可-std=gnu89

于 2009-11-01T16:57:39.860 回答
3

默认情况下,GCC 使用带有 GCC 扩展的 C89/90 标准。严格来说,默认情况下它不遵守任何特定标准,因为默认情况下,在标准要求此类消息的情况下,它不会发出任何诊断消息。您需要在-ansi -pedantic模式下运行 gcc(也可能是-Wall)以使其符合标准。在这种情况下,您将再次拥有 C89/90。

于 2009-11-01T17:55:41.320 回答