在编译像这样简单的东西时
inline int test() { return 3; }
int main()
{
test();
return 0;
}使用gcc -c test.c,一切都很顺利。如果添加了-ansi关键字gcc -ansi -c test.c,则会收到错误消息
test.c:1:8: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’即使明确选择了C99标准,gcc -std=c99 -ansi -c test.c也是如此。
出现这种情况的原因是什么?是否有推荐的修复方法?
发布于 2012-08-28 08:07:54
您需要使用:
gcc -std=c99 -c test.cThe -ansi flag specifies c90
-ansi选项等同于-std=c90。
ANSI C实际上是1990年的C版本,它不包括inline关键字。
发布于 2012-08-28 08:07:38
不,ANSI没有inline。
您的第二个命令实际上使用-ansi覆盖了-std=c99 (它们都会影响-std=),因此您实际上是在使用ANSI进行编译(不使用C99)。
发布于 2012-08-28 08:09:15
inline关键字
不是原始ANSI标准(C89)的一部分,因此默认情况下,该库不会导出任何内联函数定义。内联函数是在较新的C99标准中正式引入的,但是大多数C89编译器也在很长一段时间内包含了内联作为一个扩展。
引用自Gnu website
https://stackoverflow.com/questions/12151168
复制相似问题