[英]Does ANSI-C not know the inline keyword?
编译简单的东西时
inline int test() { return 3; }
int main()
{
test();
return 0;
}
使用gcc -c test.c
,一切都很顺利。 如果添加了-ansi
关键字gcc -ansi -c test.c
, gcc -ansi -c test.c
收到错误消息
test.c:1:8: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
即使明确选择了C99标准, gcc -std=c99 -ansi -c test.c
。
这是什么原因,是否有推荐的修复?
你需要使用:
gcc -std=c99 -c test.c
-ansi选项等效于-std = c90。
ANSI C实际上是C的1990版本,它不包含inline
关键字。
不,ANSI C没有inline
。
您的第二个命令实际上使用-ansi
覆盖-std=c99
(它们都影响-std=
),因此您实际上正在使用ANSI C进行编译(无C99)。
inline关键字不是原始ANSI C标准(C89)的一部分,因此默认情况下,库不会导出任何内联函数定义。 内联函数在较新的C99标准中正式引入,但大多数C89编译器也将内联作为扩展包含了很长时间。
引自Gnu网站
它在没有ansi选项的情况下正常工作的原因是因为gcc默认为'-std = gnu90',这是ANSI / C89加上扩展(其中一个,毫不奇怪,是对内联函数的支持)。 如果您只需要ANSI C支持,则不需要任何选项,除非您需要严格的标准符合性(如果您的代码将在其他编译器上编译,这显然可能很有用)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.