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的函数!

posted @ 2013-12-12 09:11  风一兮  阅读(1287)  评论(0编辑  收藏  举报