[英]How to properly inline and use an inline function in C99, correcting link failure?
在以下簡化的example.c
文件中執行cc -std=c99 example.c
:
inline void a()
{
}
int main()
{
a();
return 0;
}
讓我:
在函數“ main”中:
example.c :(。text + 0x7):對'a'的未定義引用
collect2:ld返回1退出狀態
據我了解,這與C99標准的要求有關,即對於無法內聯主體的情況使用的每個內聯非靜態功能,又要精確定義一個定義? 如果是這樣,我想我可以改為使用static inline
,但是我不想以后再咬我,那么什么是最好的解決方案? 顯然,我想堅持使用C99,並且要內聯一些功能。 (是的,我知道編譯器通常會在不被告知的情況下知道內聯什么,但是我有我的理由)
使用-O2左右編譯時,可能不會出現該錯誤。
內聯函數定義應該放在頭文件中,而extern inline
聲明應該放在一個編譯單元中。 做
inline void a(void){
// empty
}
// in just one .c file
#include "the-file.h"
extern inline void a(void);
BTW,宣告a
沒有void
是不是一個原型。
沒有函數原型,僅此而已,因此可以推斷出函數簽名,並且推斷出錯誤。 添加“ void a();” 到文件頂部,一切就緒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.