您的位置:首页 > 其它

c-c+ 全局变量的一些细节问题

2011-12-06 17:36 357 查看
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 <iostream>

void b::good()

{

//std::cout<<g_value<<std::endl;

}

good.cpp

#include <iostream>

#include "main.h"

using namespace std;

extern int g_value;

//int g_value;

int main()

{

b obj_b;

cout<<"old g_value:"<<g_value<<endl;

obj_b.good();

g_value = 0x10;

cout<<"new g_value:"<<g_value<<endl;

obj_b.good();

system("pause");

}

-------------------------------------------------------------------

c代码

main.h

#ifndef _MAIN_H_

#define _MAIN_H_

void good();

#endif

main.c

#include "main.h"

#include <stdio.h>

int g_value = 10;

void good()

{

printf("main.c print %d\n", g_value);

}

good.c

#include <stdio.h>

#include <stdlib.h>

#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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: