C++多文件间函数调用及全局变量共享问题
2017-08-01 16:24
274 查看
C++多文件间函数调用及全局变量共享问题
涉及extern标识符声明:
常见多文件全局变量包含问题
在.h文件中不要定义变量,通常为声明变量,定义变量会出现“error LNK2005: 已经在 .obj 中定义”类似这样的错误。根据c++规定,变量的声明必须同时满足两个条件:(1)声明必须使用extern关键字;(2)不能给变量赋初值
例:
extern int a; //声明 int a; //定义 int a = 0; //定义 extern int a = 0; //定义
一、 多文件函数声明方式
在“.h”文件中将可共享函数前加上extern
例:
单个cpp程序
void InitData(); //具体定义在对应源文件中
多个cpp程序
extern void InitData(); //具体定义在对应源文件中
二、 全局变量声明方式
单个cpp程序
int CouNum = 0; unsigned char CommandLen = 0;
多个cpp程序
“.h”文件中声明
extern int CouNum; extern unsigned char CommandLen;
“.cpp”文件中定义及初始化
extern int CouNum = 0; extern unsigned char CommandLen = 0;
三 、注意数组类型声明方式
* 普通数组 *
单个cpp程序
int CouNum[5];
多个cpp程序
“.h”文件中声明(注意数组[ ]内不标长度)
extern int CouNum[];
“.cpp”文件中定义及初始化
extern int CouNum[5] = {0,1,2,3,4,5};
* 结构体数组 *
单个cpp程序
typedef struct Cluster { int num; //簇内站点个数 int NO[100]; //簇站点编号 int classlabel; //簇标记 }CLU; CLU Clu_data[10];
多个cpp程序
“.h”文件中声明(注意数组[ ]内不标长度)
typedef struct Cluster { int num; //簇内站点个数 int NO[100]; //簇站点编号 int classlabel; //簇标记 }CLU; //头文件中定义结构体 extern CLU Clu_data[]; //声明结构体数组
“.cpp”文件中定义(其他源文件只要包含”.h”文件即可使用全局变量)
CLU Clu_data[10];
另外注意若在全局变量定义所在源文件使用static标识符,则该变量只在当前cpp内有效。头文件不会进行编译,当在头文件里使用static标识符时只在包含该头文件的.cpp文件进行编译时使用static定义
相关文章推荐
- C# 调用 C++ dll 动态链接库中多个函数时全局变量的问题
- C++多个文件共享同一头文件时全局变量的声明
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- VC6.0下调用Dll文件提供的函数接口和全局变量
- C/C++多文件共享全局变量时,使用extern的规范
- 关于全局变量,如何被多个.c文件共享问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- 关于函数内部调用全局变量的问题
- 对“C++添加一个头文件和extern以及全局变量和局部变量问题”的解释
- c++中定义一个全局变量,子函数修改变量后,主函数没有改变问题
- VC6.0下调用Dll文件提供的函数接口和全局变量(转)
- C++跨文件共享全局变量
- C/C++中关于函数调用结束后变量释放的问题
- C/C++多文件共享全局变量时,使用extern的规范
- php部分(查看文件、建立站点、语法变量、变量的几个方法、“全局局部变量的调用”、static、函数参数的作用域);
- C++ 调用其他文件的变量或函数
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- 关于全局变量,如何被多个.c文件共享问题
- 关于全局变量和函数,在其他类中调用问题,extern关键字
- 混合编译:c++文件调用c文件变量和函数、c文件调用c++文件变量和函数