1. 程式人生 > >C++extern問題記錄和解析

C++extern問題記錄和解析

1、extern (1)extern修飾變數 用例子給你示範 // 1.cpp int x = 10; // 2.cpp 注意沒有包含1.cpp #include using namespace std; extern int x; int main () { cout << x << endl; } //則輸出10 兩個檔案同在一個專案(project)中,你不包含某個檔案(cpp)而可以用它內部定義的變數,(裡是.pp不是.h, 因為在.h中定義的資料不能在.cpp中用除非這個.cpp包含這個.h檔案) 例: // 1.h #include void print() { std::cout << “hello!” << std::endl; } // 2.cpp #include 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 using namespace std; // 這裡以上兩句不能省略,因為,這裡extern void print();函式已經不起作用了,在這裡呼叫的而是本檔案中定義的void print()函式,其中用到了cout,endl;他們來源於std:: extern void print(); void print() { cout << “world!” << endl; } int main () { print(); } // 輸出結果為world! 還有一個extern "C"就不用說了,用這個可以允許C++程式中呼叫C的函式!