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

Nic*_*mer 14 c inline c89

编译简单的东西时

inline int test() { return 3; }

int main()
{
 test();
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

用gcc -c test.c,一切顺利.如果-ansi添加了关键字,gcc -ansi -c test.c则会收到错误消息

test.c:1:8: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
Run Code Online (Sandbox Code Playgroud)

即使明确选择了C99标准,也是如此gcc -std=c99 -ansi -c test.c.

这是什么原因,是否有推荐的修复?

Ree*_*sey 15

你需要使用:

gcc -std=c99 -c test.c
Run Code Online (Sandbox Code Playgroud)

该-ansi标志指定C90:

-ansi选项等效于-std = c90.

ANSI C实际上是C的1990版本,它不包含inline关键字.


nne*_*neo 11

不,ANSI C没有inline.

你的第二个命令实际上覆盖-std=c99用-ansi(它们都影响-std=),所以你在使用效果ANSI C(C99无)编制.


Seç*_*şçı 5

inline关键字不是原始ANSI C标准(C89)的一部分,因此默认情况下,库不会导出任何内联函数定义.内联函数在较新的C99标准中正式引入,但大多数C89编译器也将内联作为扩展包含了很长时间.

引自Gnu网站