关于c和c++里全局变量或者设备配置信息定义的要点汇总,extern

这里还是有细微的差别。 现在梳理一下,全局变量,总的原则是:

####定义在c或者cpp里, 声明全部放在h头文件里#######

1 在c的环境里

my_vary.h头文件定义如下:

#ifndef      MY_VARY_H      
#define      MY_VARY_H   


#ifdef EXPORT_GLOBALS
#define EXTERN
#else
#define EXTERN extern
#endif

extern int g_data;

extern const char g_aaaa[3];

extern const int g_xa;

extern const char *Congfig;

extern char device_name[10];

#endif

对应的c文件定义如下:

char device_name[] = "china";

int g_data = 100;


const char g_aaaa[3] = "AB";

const int g_xa = 100;

const char *Congfig = “XXX”;
;

/分割线

2 在c++里

但是在cpp中,千万注意,如果照着上面的写,肯定出错先LNK200 无法解析的外部符合,这种错误。 为什么,原因就是

cpp里,按照c++方式编译,这些变量被强制改名了,比如g_data变成了g_data@@3HA

链接的时候,找不到g_data@@3HA,只有g_data。名字对不上。

所以,在与cpp文件配对的头文件里要这么写:

#ifndef      MY_VARY_H      
#define      MY_VARY_H   


#ifdef EXPORT_GLOBALS
#define EXTERN
#else
#define EXTERN extern
#endif

#ifdef  __cplusplus      
extern "C" {
#endif      

    extern char g_st[];

    extern int  g_data;

    extern const char g_aaaa[3];

    extern const int g_xa;

    extern const char *Congfig;
    

#ifdef  __cplusplus      
}
#endif  

#endif

就是说,变量的声明要放在头文件里,并且要强制按照c语言方式编译

#ifdef  __cplusplus      
extern "C"{      
#endif      
 

 XXXXXXXXXXXXX 要放到这里

    extern const char *Congfig;


#ifdef  __cplusplus      
}      
#endif 

/

总结就是c文件和cpp文件的写法是一模一样的

只是两个H头文件里不一样。

另外,需要定义产品信息,也可以像这样定义。

device_define.h,  device_define.c一组

device_define.h,  device_define.cpp一组

就不需要用ini文件再来读取,可以节约空间

只是两个h头文件,略微不同

细节啊,注意c和c++的细节哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值