c++中的全局变量
1.可以定义的位置
main函数所在文件的函数体外
其它cpp文件的函数体外
不能放在h文件中,因为h文件可能会有多次引用,会爆重复定义
2.引用方式,c++里面
通过extern 加变量的定义语句的方式 这样所有引用的这个变量只会是一个值
c中的全局变量
1.可以定义的位置
main函数所在文件的函数体外
其它cpp文件的函数体外
不能放在h文件中,因为h文件可能会有多次引用,会爆重复定义
---------------------------------------------------------
为什么可以这样使用?
编译分为编译和链接过程。
每个c,cpp对应一个文件,虽然在外面是不能看见,但是如果使用了extern的话,链接器会将同一名字的变量链接到一个地址,大约是在文件的某个段里面。
因为c++的语法要求更严格,所以要求extern的变量和原变量必须有相同的声明,而c其实就是汇编语言没什么区别,更在乎的是变量的长度,对应类型没有做更多的检查。
---------------------------------------------------------
附录:
c++代码
--------------
main.h
#ifndef _MAIN_H_
#define _MAIN_H_
int g_value = 10;
class b
{
public:
int _value;
void good();
};
#endif
main.cpp
#include "main.h"
#include
void b::good()
{
//std::cout< } good.cpp #include #include "main.h" using namespace std; extern int g_value; //int g_value; int main() { b obj_b; cout<<"old g_value:"< obj_b.good(); g_value = 0x10; cout<<"new g_value:"< obj_b.good(); system("pause"); } ------------------------------------------------------------------- c代码 main.h #ifndef _MAIN_H_ #define _MAIN_H_ void good(); #endif main.c #include "main.h" #include int g_value = 10; void good() { printf("main.c print %d\n", g_value); } good.c #include #include #include "main.h" extern char g_value; //extern int g_value; 注意类型不一样在c里面是不会爆编译错误的 //int g_value; int main() { printf("old value:%d\n", g_value); g_value =0x10; printf("new value:%d\n", g_value); system("pause"); } 摘自 RunBoying