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

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

}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值