繁体   English   中英

ANSI-C不知道内联关键字吗?

[英]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.cgcc -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标志指定c90

-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM