extern關鍵字的用法及注意事項

       首先extern是一個關鍵字,它最簡單的一個用法就是實現在一個文件中引用另一個文件中的變量或者函數。

就比如我們一個項目下有兩個文件,分別是a.cpp和b.cpp文件,當我們要在b.cpp中想使用a.cpp的全局變量或者是某一個功能函數時我們不需要再次編寫,而是使用extern這個關鍵字來告訴系統我們要調用某個變量,具體如下

//a.cpp
#include<iostream>
int c=1;
int fun(int a,int b)
{
	return a+b;
}

a.cpp中有全局變量c,還有一個函數fun(),則b.cpp可以extern調用

//b.cppb.cpp
#include<iostream>
extern int fun(int a,int b);
extern int c;
int main()
{
	int a=fun(1,2);
	int b=c;
}

       erxtern最關鍵的用法就是爲了能夠正確實現c++代碼調用其它c語言代碼,會指示編譯器用extern “C”修飾的變量和函數是按照C語言方式進行編譯和鏈接的。

       說白了就是如果加上extern “C”的話編譯器就會按照編譯c語言的方式區編譯cpp文件。就像過去很多代碼都是用c語言編寫的,現在想使用可能按照c++的編譯不是完全支持c。所有通過這個關鍵字來實現c的編譯。

       其中最大的區別莫過於函數重載這一部分,大家都知道c++支持函數重載,但c語言不支持函數重載。原因就是c++編譯函數的過程中會連同函數名和參數同時傳給編譯器,但是c編譯過程中只傳遞函數名。比如我們有個函數是 void fun(int a,int b);如果c++編譯傳的就是fun int int;但是c編譯就只傳遞fun。

       還有一個注意事項就是,extern的“反義詞”就是static關鍵字。我們知道extern 修飾的變量或者函數可以在不同的模塊下進行調用,但static修飾的變量只能在當前模塊調用。所有extern不可以修飾由static定義的變量或者方法

 

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