[问题] inline function导致Undefined reference

楼主: zzss2003 (brotherD)   2020-01-01 18:35:32
程式码: 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?
作者: Fenikso (薪水小偷)   2020-01-02 00:03:00
简单的说, linker要一份 "所有trnaslation unit都看得到的 foo" (不管有没有人真的用到, 反正他就是要)但是你的inline foo只有自己这个translation unit看得到linker就不开心了
作者: lovejomi (JOMI)   2020-01-02 21:35:00
实际上compile没问题,看不懂到底为啥说会error
作者: Lipraxde (Lipraxde)   2020-01-02 22:18:00
连结里的内容看不懂+1
作者: Fenikso (薪水小偷)   2020-01-02 22:42:00
要用gcc -O0才会看到error
作者: dces4212 (flawless)   2020-01-02 23:56:00
只看懂gcc把inline置换(不考虑优化)了,可是为什么linker还会要需要foo的symbol呢?求懂的大大解说,感谢
作者: Fenikso (薪水小偷)   2020-01-03 00:06:00
因为你有宣告而且在code里面有用到, linker就要去找定义linker不知道唯一用到的地方被inline换掉了他只知道有个undefined symbol在symbol table上面
作者: Lipraxde (Lipraxde)   2020-01-03 10:47:00
真的有耶,以前都没注意到
作者: dces4212 (flawless)   2020-01-04 02:18:00
了解 感谢解说
作者: lantw44 (#######################)   2020-01-04 13:00:00
当你 gcc 开 -O0 的时候,即使写了 inline,gcc 也不会真的去 inline,因此会需要一个内部或外部可见的版本。由于只有在成功 inline 时才会使用它,没有成功 inline 的时候就会找不到这个函式。要让 inline 函式在档案内能当普通函式使用可以加 static要让 inline 函式在其他档案也能当普通函式可以加 extern

Links booklink

Contact Us: admin [ a t ] ucptt.com