1、首先,我们可以在函数外面定义变量,就是全局变量。
2、局部变量可以与全局变量同样命名。
3、但是优先级是局部变量优先。
4、但是局部变量的生命周期是整个结构内。
5、全局变量是整个程序结束,才释放。
6、我们也可以为变量加上修饰符。
一般来说,不会将全局变量的定义写在头文件中,因为如果多个c源文件都添加了头文件,那很容易引起重定义的问题,这时候一般编译器都会提示。
正确的作法是在c源文件中定义一个全局变量。在头文件中加入全局变量的声明。比如
//var.c 一个主要用于定义全局变量的c源文件
int g_a;
char g_x;
//var.h 用于声明定义的全局变量
extern int g_a;
extern char g_x;
//test.c 一个用于测试的头文件
#include
void f(){
g_a = 1;
g_x = 'x';
}
你得理解:
我们把.c和.h分开是为什么
连接做的事情就是把.c和.h又合在一起,不仅如此,还把ABC都合在一起(而你的条件编译指令仅限于第一个阶段起作用!);于是包含了int a声明的a.o、b.o和c.o在合成xx.out的时候,就有3次int a声明;
通常正确的做法是:把”变量/函数声明“放在.h,而把”变量/函数定义“放在.c;那么你的这句int a是声明还是定义?从错误提示“。。。already defined。。。”可以看出链接工具把它识别为“定义”而不是“声明”。函数声明不会有这种问题,而变量的声明和定义(尤其在不带初始化的情况下)就长的一模一样。所以我的建议是,你不要纠结这个问题了,把这句int a放在A.c里面,然后去B.h和C.h里面声明extern int a(还要啰嗦一句,变量不要用一个字母a就概括了);
希望对你有帮助
其实没必要纠结~~你只要注意头文件~~的定义~~然后在引用的时候注意引用了哪个就好了~~这语句有点乱~~你自己规范点就好了~~想那么多没用的东西干嘛~~哪一个正常点的项目看看代码