簡體   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