VC中extern用法
用例子给你示范
1 // 1.cpp 2 int x = 10; 3 // 2.cpp 注意没有包含1.cpp 4 #include <iostream> 5 using namespace std; 6 extern int x; 7 int main () 8 { cout << x << endl; } 9 //则输出10
两个文件同在一个项目(project)中,你不包含某个文件(cpp)而可以用它内部定义的变量,(里是.pp不是.h, 因为在.h中定义的数据不能在.cpp中用除非这个.cpp包含这个.h文件)
例:
1 // 1.h 2 #include <iostream> 3 void print() 4 { 5 std::cout << "hello!" << std::endl; 6 } 7 // 2.cpp 8 #include <iostream> 9 using namespace std; 10 // 以上两句在这个例子中可以不要 11 extern void print(); 12 int main () 13 { 14 print(); 15 }
就会出错因为1.h中的void print();在不包含它的文件中是不可调用的,即使在声明了extern 也于事无补,如果你将这个例子中的1.h名字换成1.cpp就对了!
从这些可以看出来,extern在这里起的作用是告诉编译器,你这个print()已经在某个.cpp中已经定义了,这里只不过是声明一下有这个东西,然后拿来用一下。定义只能出现一次,声明却可出现多次,也就是说extern声明可在多个文件中用(包括.h)
还有,你还可以屏蔽extern声明,如第二个例子中的第二个.cpp文件可以改成
1 #include <iostream> 2 using namespace std; 3 // 这里以上两句不能省略,因为,这里extern void print();函数已经不起作用了,在这里调用的而是本文件中定义的void print()函数,其中用到了cout,endl;
//他们来源于std::<iostream> 4 extern void print(); 5 void print() 6 { 7 cout << "world!" << endl; 8 } 9 10 int main () 11 { 12 print(); 13 } 14 // 输出结果为world!
还有一个extern "C"就不用说了,用这个可以允许C++程序中调用C的函数!