在C语言中,经常会出现一个项目由多个C文件共同组成,而多个C文件中有时需要引用相同的变量。在嵌入式单片机中,也会出现相同的情况,除了需要条件编译外,还需要全局变量声明:"extern"外部声明。一处进行了定义 unsigned char a ,其他地方再次引用只需要直接声明就好,extern a;
放到c文件中,其他地方调用时extern NvU32 disp_init_flag ;一下还是可以的。放到h文件中不行,每个包含这个h文件的c文件都会赋值,就冲突了.
A.带“extern ”关键字的语句属于声明 (declarations ),不是定义 (definitions ),他不会给变量分配内存。实际上,它是说明程序中的某处包含这个变量的定义 。一个变量可以在程序中被声明 (declarations )多次,但是只能被定义 (definitions )一次。
B.声明 (declarations )时你可以给变量初始化。但是一旦你这样做,那么这句话也就变成了定义 (definitions ),因为只有在定义 (definitions )的时候才会为变量分配内存。初始化的时候必然要为初始值分配存储空间。如果你在声明 (declarations )的时候同时初始化了变量,即便“extern ”关键字存在,这个语句也会认为是定义 (definitions )。
B.声明 (declarations )时你可以给变量初始化。但是一旦你这样做,那么这句话也就变成了定义 (definitions ),因为只有在定义 (definitions )的时候才会为变量分配内存。初始化的时候必然要为初始值分配存储空间。如果你在声明 (declarations )的时候同时初始化了变量,即便“extern ”关键字存在,这个语句也会认为是定义 (definitions )。
其他方面需要具体研究了。http://hi.baidu.com/new/wangh0802