您的位置:首页 > 编程语言 > C语言/C++

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

2010-01-06 12:51 288 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: