作者zzss2003 (brotherD)
看板C_and_CPP
标题[问题] inline function导致Undefined reference
时间Wed Jan 1 18:35:32 2020
程式码:
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1577874936.A.C5E.html
※ 编辑: zzss2003 (36.234.116.107 台湾), 01/01/2020 18:36:06
1F:推 Fenikso: 简单的说, linker要一份 "所有trnaslation unit都看得到 01/02 00:03
2F:→ Fenikso: 的 foo" (不管有没有人真的用到, 反正他就是要) 01/02 00:04
3F:→ Fenikso: 但是你的inline foo只有自己这个translation unit看得到 01/02 00:05
4F:→ Fenikso: linker就不开心了 01/02 00:05
5F:推 lovejomi: 实际上compile没问题,看不懂到底为啥说会error 01/02 21:35
6F:→ Lipraxde: 连结里的内容看不懂+1 01/02 22:18
7F:推 Fenikso: 要用gcc -O0才会看到error 01/02 22:42
8F:推 dces4212: 只看懂gcc把inline置换(不考虑优化)了,可是为什麽lin 01/02 23:56
9F:→ dces4212: ker还会要需要foo的symbol呢?求懂的大大解说,感谢 01/02 23:56
10F:推 Fenikso: 因为你有宣告而且在code里面有用到, linker就要去找定义 01/03 00:06
11F:→ Fenikso: linker不知道唯一用到的地方被inline换掉了 01/03 00:07
12F:→ Fenikso: 他只知道有个undefined symbol在symbol table上面 01/03 00:08
13F:→ Lipraxde: 真的有耶,以前都没注意到 01/03 10:47
14F:推 dces4212: 了解 感谢解说 01/04 02:18
15F:推 lantw44: 当你 gcc 开 -O0 的时候,即使写了 inline,gcc 也不会真 01/04 13:00
16F:→ lantw44: 的去 inline,因此会需要一个内部或外部可见的版本。由於 01/04 13:01
17F:→ lantw44: 只有在成功 inline 时才会使用它,没有成功 inline 的时 01/04 13:03
18F:→ lantw44: 候就会找不到这个函式。 01/04 13:04
19F:→ lantw44: 要让 inline 函式在档案内能当普通函式使用可以加 static 01/04 13:05
20F:→ lantw44: 要让 inline 函式在其他档案也能当普通函式可以加 extern 01/04 13:06