防止重複定義的extern技巧的使用

2021-06-03 05:52:46 字數 959 閱讀 7665

這些文章是 作者看一些優秀的**的學習筆記。本篇是uc_os中的一些**。

如:自己建立乙個工程,全域性變數應該是得到記憶體分配並且可以被其他模組通過c語言中的extern關鍵字呼叫的變數。

因此,必須在  .c 和 .h 檔案中定義或是通過extern來引入,這種重複的定義很容易導致錯誤。

以下討論的方法只需在標頭檔案中定義一次,這就是學習本文的目的。

#ifdef module_name_globals

#define module_name_ext

#else

#define module_name_ext extern

#endif

module_name_ext  int8u  method_name();   // 對方法的宣告

#define module_name_globals   // 此檔案中定義了此巨集(module_name_globals   ),所以最好把公用的方法,對外的介面的實現都寫在此檔案。

#include "module_name_head.h"

module_name_ext int8u  method_name()

#include "module_name_head.h"

#include "module_name_head.h"

#include "module_name_head.h"

這樣的話,在 其餘的檔案中file_1.c  和 file_2.c 和  file_3.c 中:

module_name_ext其實都是extern,所以它們都是對module_name__head_common.c檔案中

int8u  method_name()方法的引用;**中對該方法的呼叫就ok了。

因此不會出現重複定義的情況。

若是需要新增乙個公用方法的話,只需在 ***_head.h 標頭檔案中新增乙個宣告,在***_head_common.c中新增實現就ok了。

防止全域性變數重複定義

問題 在.h檔案中定義了全域性變數 並用 ifndef identifier h define identifier h endif但是依然出現重複定義問題 分析 ifndef這套條件編譯是為了防止同乙個.c檔案中包含多個相同.h檔案的 比如有乙個.c檔案包含了a.h,a.h又包含了b.h,那麼當你...

標頭檔案中防止重複定義的巨集

我是個有 潔癖 的人,不願意與警告為伍,哪怕是只有乙個,也會讓我渾身上下都不舒服。在一次整改乙個嵌入式arm工程源 的過程中,乙個編譯告警迷惑了我,費了我不少時間。waring c2207w inventing extern inituartpos main.c line 87 按理說不應該出現這種...

自定義Button防止重複提交

由於網速問題,使用者總是迫不及待的多次點選提交按鈕,從而造成多次提交。以下通過自定義button控制項,來解決此問題。原理 點選按鈕後,通過設定其disabled屬性為true來達到目的。自定義button控制項核心 protected override void addattributestore...