C/C++全局变量的定义与引用问题

最近在忙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里引用但没定义就会报错未定义,要是都定义会报错重复定义。


你可能感兴趣的:(C/C++)