閱讀111 返回首頁    go 人物


c++中 extern 的含義和基本用法

在網上看到一個非常好的講解。

用例子給你示範 
// 1.cpp 
int x = 10; 
// 2.cpp 注意沒有包含1.cpp 
#include <iostream> 
using namespace std; 
extern int x;
int main () 
{ cout << x << endl; } 
//則輸出10 
兩個文件同在一個項目(project)中,你不包含某個文件(cpp)而可以用它內部定義的變量,(裏是.pp不是.h, 因為在.h中定義的數據不能在.cpp中用除非這個.cpp包含這個.h文件) 
例: 
// 1.h 
#include <iostream> 
void print() 
{ 
std::cout << "hello!" << std::endl; 
} 
// 2.cpp 
#include <iostream> 
using namespace std; 
// 以上兩句在這個例子中可以不要 
extern void print(); 
int main () 
{ 
print(); 
} 
就會出錯因為1.h中的void print();在不包含它的文件中是不可調用的,即使在聲明了extern 也於事無補,如果你將這個例子中的1.h名字換成1.cpp就對了! 
從這些可以看出來,extern在這裏起的作用是告訴編譯器,你這個print()已經在某個.cpp中已經定義了,這裏隻不過是聲明一下有這個東西,然後拿來用一下。定義隻能出現一次,聲明卻可出現多次,也就是說extern聲明可在多個文件中用(包括.h) 
還有,你還可以屏蔽extern聲明,如第二個例子中的第二個.cpp文件可以改成 
#include <iostream> 
using namespace std; 
// 這裏以上兩句不能省略,因為,這裏extern void print();函數已經不起作用了,在這裏調用的而是本文件中定義的void print()函數,其中用到了cout,endl;他們來源於std::<iostream> 
extern void print(); 
void print() 
{ 
cout << "world!" << endl; 
} 

int main () 
{ 
print(); 
} 
// 輸出結果為world! 
還有一個extern "C"就不用說了,用這個可以允許C++程序中調用C的函數!



最後更新:2017-04-03 05:38:58

  上一篇:go Windows 消息機製
  下一篇:go [公告]阿裏雲ECS服務升級通知