赞
踩
这里还是有细微的差别。 现在梳理一下,全局变量,总的原则是:
####定义在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++的细节哦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。