[英]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.