gcc純C語言inline函數(shù)鏈接出錯問題

下面這段代碼,保存為.c文件:

inline void fff(void)
{
}

int main(void)
{
    fff();
}

gcc7.5編譯出錯:


image.png

如果你去網(wǎng)上搜索C inline的問題,會找到很多令你更困惑的解答。比如這個:


image.png

看到這個,你會說:“不對啊,我這編譯出錯就是因為gcc沒有給我的inline函數(shù)生成匯編代碼段啊?按這個說法,extern inline才肯定會編譯出錯的對吧?那我試試?!?br>
image.png

然而,編譯卻成功了。
為什么會這樣?請看下面兩張截圖:

  1. inline


    image.png
  2. extern inline


    image.png

這么一對比就看出來了,gnu90及之前、gnu99及之后的標(biāo)準(zhǔn)對inline、extern inline的處理不同。
所以,如果你在網(wǎng)上看到的解釋跟你測試的結(jié)果不一致,那只是因為作者在講c90/c89/gnu89/gnu90標(biāo)準(zhǔn)。
在gcc onlinedocs里給出了inline函數(shù)使用的兩種方法:

  1. static inline聲明+定義
  2. extern聲明+inline定義

建議只使用方法1,忘了inline和extern inline吧。
這篇文章總結(jié)得很全面、準(zhǔn)確:關(guān)于各版本C語言標(biāo)準(zhǔn)中inline說明符的語義 - 知乎 (zhihu.com)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容