extern使用注意事項與語法簡述

1.使用extern時要嚴格對應聲明的格式,定義的是數組類型,extern char a[];而不能是extern char *a;

2.如果要在*.c文件中引用另一個文件中的一個全局變量,那就應該放在*.h中用extern來聲明這個全局變量。

3.函數聲明和定義前面extern沒有實際的意義(除非不想在對應頭文件聲明——省略頭文件),如果該函數不想被調用可以添加static關鍵詞

4.根據編譯器不同,有些編譯器可以鏈接(extern)常量:const float pi = 3.14;  extern const flaot pi;

5.extern 可以鏈接外部變量,當我們兩個文件同時引用同一個全局變量的時候,只在一個文件定義,編譯時會在未定義的文件報錯;在兩個文件都定義,編譯通過,鏈接時會包定義衝突的錯誤,解決辦法就是其中一個文件定義,另一個文件extern來告訴編譯器這個變量在其他文件定義過了,自個兒去找(^..^)。當然也可以通過頭文件的方式來實現,變量定義在頭文件,連個引用變量的.c文件均include有該頭文件。

6.extern "c",在C++的環境,想要兼容C,一般都是需要extern "C"。格式:

#ifdef __cplusplus

#if __cplusplus

extern "C"{

#endif

#endif /* __cplusplus */

//.h文件結束的地方

#ifdef __cplusplus

#if __cplusplus

}

#endif

#endif /* __cplusplus */

原因是雖說C++兼容C,但是由於C++具有面向對象的特性,所以假設沒有加上extern "C",而C++語法支持函數重載的原因,C++編譯器函數編譯後會有類似_foo_int_float_..這樣帶有變量參數之類的名字(函數重載實現的原理),而C的編譯器則會生成_foo這樣的名稱,所以在鏈接函數引用的時候會報錯(編譯後生成的名稱都不一樣如何引用C模塊的函數).

參考:https://baike.baidu.com/item/extern/4443005?fr=aladdin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章