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");
}
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");
}
相关文章推荐
- 关于全局变量指针直接 malloc分配内存的一些问题
- C语言全局变量一些基本问题
- 全局变量的一些问题
- Path定义为全局变量引起的一些问题
- javascript里有关全局变量和局部变量的一些细节
- 全局变量的细节问题(1-1-3)
- C++那些细节--extern关键字&&全局变量定义问题
- [转] - QPixmap全局变量载入多张图片失效问题
- 关于全局变量及静态变量和initializer element is not constant问题
- Android开发调试-static静态变量与如何定义全局变量的问题
- 马尔可夫链——从一个编程作业中看看程序设计的一些细节问题
- 一些不熟悉的细节问题总结帖
- c++语言 全局变量 可声明问题
- javascript中运用闭包和自执行函数解决大量的全局变量问题
- java同名全局变量和局部变量的问题
- 关于使用webView的一些细节问题
- js中全局变量的问题
- PHPUnit 全局变量问题
- android业务组件化开发中的一些细节问题
- struts2一些小细节问题总结