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
test1.cpp
circle.h
circle.cpp
它的作用就是告诉编译器这个变量是在其他文件中定义的(是外援),要是在本文件中
看到它的名字千万别奇怪。
编译器是相信同伙的,所以在编译的时候要是看到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++ 中extern的基本解释说明(VC代码)
- MatConvNet 相关函数解释说明,MatConvNet 细节理解,MatConvNet 代码理解
- 通过代码,解释ExecutorService基本用法
- VC/C/C++ 代码8
- VC/C/C++ 代码16
- VC/C/C++ 代码18
- 【C++码农】WMI技术介绍和应用——VC开发WMI应用的基本步骤
- 数据结构 - 2-路插入排序 具体解释 及 代码(C++)
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- UML类图关系模式及C++代码说明(转载)
- 关与C、C++、VC 的说明
- 二叉树的基本操作 C++代码实现
- Vsc++中代码自动填补功能说明
- 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤
- UML类图关系模式及C++代码说明
- 输出参数out和引用参数ref区别(代码解释说明)
- 顺序表基本操作的代码实现:C++实现
- 数据结构 - 树形选择排序 (tree selection sort) 具体解释 及 代码(C++)