最近在忙live555项目;说实话这是我做的第一个大型项目。虽然工作这么久还真是第一次做这么大项目;感觉自己这一年还真是没有一点进步;加个全局变量废了我半天力。废话不多说,切入正题
全局变量,最早我看书C primer Plus里说的应该是叫做局外变量吧。总是就是以关键字extern 在一个头文件 声明的,然后这个被声明的变量可以被项目里的任意一个.cpp或者.c文件引用,引用的方式有两种,一种是通过 extern声明引用,一种是包含这个头文件就可以直接用了。举个例子:
头文件 ext.h
#ifdef _EXT_H_
#define _EXT_H_
extern int data;// 声明
#endif
b.h
#ifdef _B_H_
#define _B_H_
b_out();
#endif
文件 b.c
#include "ext.h"
#include "b.h"
int data; //定义,可以赋值,也可以不赋值 只能定义一次
b_out(){
printf("b.data = %d\n",data);//赋值
}
使用文件 main.c
#include "ext.h"
#include"b.h"
int main(){
data=0;//赋值
b.out();
}
看着很简单, 但是就因为这个定义问题 让我绕了不少弯路,因为项目比较大,我明明定义了,编译报错说没定义,有时候更会说没声明,好几次我都怀疑是Makefile问题,事实证明有这方面的一点问题,但不是主要问题,经过我看了多个博客后,我终于知道这个定义问题必须定义虽然只能定义一次,但不能任意定义,而应该定义在一个基文件,这个是我造的词,怎么说这个基文件呢,比如,你编译一个文件main.cpp 生成一个main文件, 然后这个main还依赖另外一个base.cpp编译生成的base.o文件才能编译完成,那么这个base.cpp就是基文件,按照软件来说就是依赖包。倘若你在main里定义了 然后在base里引用但没定义就会报错未定义,要是都定义会报错重复定义。