簡體   English   中英

如何在C99中正確內聯和使用內聯函數,更正鏈接故障?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM