[問題] inline function導致Undefined reference

看板C_and_CPP (C/C++)作者 (brotherD)時間5年前 (2020/01/01 18:35), 5年前編輯推噓7(7013)
留言20則, 5人參與, 5年前最新討論串1/1
程式碼: https://ideone.com/tLzUTW 文章: https://www.geeksforgeeks.org/inline-function-in-c/ 文章裡的說法是: "Normally GCC’s file scope is “not extern linkage”. That means inline function is never ever provided to the linker which is causing linker error, mentioned above. " 基於看不懂上述英文的解釋,請問是什麼原因導致compiler error? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.234.116.107 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1577874936.A.C5E.html ※ 編輯: zzss2003 (36.234.116.107 臺灣), 01/01/2020 18:36:06

01/02 00:03, 5年前 , 1F
簡單的說, linker要一份 "所有trnaslation unit都看得到
01/02 00:03, 1F

01/02 00:04, 5年前 , 2F
的 foo" (不管有沒有人真的用到, 反正他就是要)
01/02 00:04, 2F

01/02 00:05, 5年前 , 3F
但是你的inline foo只有自己這個translation unit看得到
01/02 00:05, 3F

01/02 00:05, 5年前 , 4F
linker就不開心了
01/02 00:05, 4F

01/02 21:35, 5年前 , 5F
實際上compile沒問題,看不懂到底為啥說會error
01/02 21:35, 5F

01/02 22:18, 5年前 , 6F
連結裡的內容看不懂+1
01/02 22:18, 6F

01/02 22:42, 5年前 , 7F
要用gcc -O0才會看到error
01/02 22:42, 7F

01/02 23:56, 5年前 , 8F
只看懂gcc把inline置換(不考慮優化)了,可是為什麼lin
01/02 23:56, 8F

01/02 23:56, 5年前 , 9F
ker還會要需要foo的symbol呢?求懂的大大解說,感謝
01/02 23:56, 9F

01/03 00:06, 5年前 , 10F
因為你有宣告而且在code裡面有用到, linker就要去找定義
01/03 00:06, 10F

01/03 00:07, 5年前 , 11F
linker不知道唯一用到的地方被inline換掉了
01/03 00:07, 11F

01/03 00:08, 5年前 , 12F
他只知道有個undefined symbol在symbol table上面
01/03 00:08, 12F

01/03 10:47, 5年前 , 13F
真的有耶,以前都沒注意到
01/03 10:47, 13F

01/04 02:18, 5年前 , 14F
了解 感謝解說
01/04 02:18, 14F

01/04 13:00, 5年前 , 15F
當你 gcc 開 -O0 的時候,即使寫了 inline,gcc 也不會真
01/04 13:00, 15F

01/04 13:01, 5年前 , 16F
的去 inline,因此會需要一個內部或外部可見的版本。由於
01/04 13:01, 16F

01/04 13:03, 5年前 , 17F
只有在成功 inline 時才會使用它,沒有成功 inline 的時
01/04 13:03, 17F

01/04 13:04, 5年前 , 18F
候就會找不到這個函式。
01/04 13:04, 18F

01/04 13:05, 5年前 , 19F
要讓 inline 函式在檔案內能當普通函式使用可以加 static
01/04 13:05, 19F

01/04 13:06, 5年前 , 20F
要讓 inline 函式在其他檔案也能當普通函式可以加 extern
01/04 13:06, 20F
文章代碼(AID): #1U37NunU (C_and_CPP)
文章代碼(AID): #1U37NunU (C_and_CPP)