1、extern的理解和實驗

用extern聲明一個變量,編譯器必須在其他某處找到定義才行,否則會報錯,定義不能在某一函數中,即不能在某一作用域{}中

比如在頭文件xxx.h中聲明extern int externtest ,舉兩種錯誤情況;

第一:

在xxx.cpp中有一個函數Fun(),若只在Fun中寫“externtest  = 1",則會報錯“ LNK2001: 無法解析的外部符號”。因爲abc還沒有定義。這裏要注意“定義”是需要類型說明符的,單純一句abc = 1不是定義,是使用變量。

第二:

若在Fun()中寫int externtest = 1;這時externtest只是Fun()中的局部變量,在Fun()中可以用,在全局範圍內externtest仍然是沒有定義的,在其他函數,比如main函數中仍然不可用,會出現同樣的LNK2001錯誤。

所以:

必須在函數體之外,比如xxx.cpp中定義 int externtest = 1;此時externtest可供所有#include "xxx.h"的.cpp使用,即只需在一個cpp內的全局範圍定義externtest,其他cpp中只需要聲明extern int externtest即可。而最初定義externtest的那個cpp不需要先用extern int來聲明,直接int extern 聲明+定義即可。


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