c++ 中extern的基本解释说明(VC代码)

extern  a;

 

它的作用就是告诉编译器这个变量是在其他文件中定义的(是外援),要是在本文件中
看到它的名字千万别奇怪。

 

编译器是相信同伙的,所以在编译的时候要是看到a变量时会认为它是存在,不会报错。只有在
链接的时候链接器才会去其它obj文件中寻找a变量的定义(地址),找到则顺利链接,否则报错。

因为编译器只需要知道extern所声明变量的名字就可以了,所以extern int a可以写成 extern a(即省略变量类型)。

并不是所有的变量都能用extern声明,只有全局变量并且没有被static 声明的变量才能声明为extern.而且还要注意extern这个玩意千万不要放在.h文件里,这样你感觉程序没有错误但是就是出现链接错误,extern一定放在cpp文件中,

h文件只负责声明,他其他什么工作也不做,不要赋予h文件太多的功能,这样你都不知道是怎样出的错。

测试过程如下:

在vc++中建立俩个类 test1 和 circle,在test1.h 中定义变量ok

在circle的cpp中声明extern ok变量,他们分别如下:

test1.h

 

#if !defined(AFX_TEST1_H__C6342063_3CF3_48C3_940B_45E87D938F5D__INCLUDED_) #define AFX_TEST1_H__C6342063_3CF3_48C3_940B_45E87D938F5D__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 int ok=30560; class test1 { public: test1(); virtual ~test1(); }; #endif

 

test1.cpp

#include "test1.h" test1::test1() { } test1::~test1() { }

 

circle.h

#if !defined(AFX_CIRCLE_H__9A50C655_F7DB_4299_AE5F_8E42CAF773AD__INCLUDED_) #define AFX_CIRCLE_H__9A50C655_F7DB_4299_AE5F_8E42CAF773AD__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif class circle { public: circle(); virtual ~circle(); void fun(); }; #endif

 

circle.cpp

 

#include "circle.h" #include "iostream.h" extern ok; circle::circle() { } circle::~circle() { } void circle::fun() { cout<<ok<<endl; } int main() { circle* ci=new circle(); ci->fun(); cout<<"ÎÒϲ»¶C++/n"; return 0; }   

你可能感兴趣的:(C++,c,测试,Class,编译器,fun)