推 Fenikso: 簡單的說, linker要一份 "所有trnaslation unit都看得到 01/02 00:03
→ Fenikso: 的 foo" (不管有沒有人真的用到, 反正他就是要) 01/02 00:04
→ Fenikso: 但是你的inline foo只有自己這個translation unit看得到 01/02 00:05
→ Fenikso: linker就不開心了 01/02 00:05
推 lovejomi: 實際上compile沒問題,看不懂到底為啥說會error 01/02 21:35
→ Lipraxde: 連結裡的內容看不懂+1 01/02 22:18
推 Fenikso: 要用gcc -O0才會看到error 01/02 22:42
推 dces4212: 只看懂gcc把inline置換(不考慮優化)了,可是為什麼lin 01/02 23:56
→ dces4212: ker還會要需要foo的symbol呢?求懂的大大解說,感謝 01/02 23:56
推 Fenikso: 因為你有宣告而且在code裡面有用到, linker就要去找定義 01/03 00:06
→ Fenikso: linker不知道唯一用到的地方被inline換掉了 01/03 00:07
→ Fenikso: 他只知道有個undefined symbol在symbol table上面 01/03 00:08
→ Lipraxde: 真的有耶,以前都沒注意到 01/03 10:47
推 dces4212: 了解 感謝解說 01/04 02:18
推 lantw44: 當你 gcc 開 -O0 的時候,即使寫了 inline,gcc 也不會真 01/04 13:00
→ lantw44: 的去 inline,因此會需要一個內部或外部可見的版本。由於 01/04 13:01
→ lantw44: 只有在成功 inline 時才會使用它,沒有成功 inline 的時 01/04 13:03
→ lantw44: 候就會找不到這個函式。 01/04 13:04
→ lantw44: 要讓 inline 函式在檔案內能當普通函式使用可以加 static 01/04 13:05
→ lantw44: 要讓 inline 函式在其他檔案也能當普通函式可以加 extern 01/04 13:06