C和C++全局变量的一些细节问题

2014-11-24 12:32:29 · 作者: · 浏览: 0

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