有一个tim.h文件,它有5个int变量:int a;int b ;int c ;int d ;int e;。我在myfile.c文件中包含了tim.h。
myfile.c有4个函数:void func 1();void func 2();void func 3();void func 4();
现在我在一开始就包括了tim.h。
现在a,B,c,d,e变成全局变量了吗?如果我只想让'a'成为func 1()的局部变量,我应该只在那个函数中定义和声明'a',而不是在.h文件中?
获取文件之间的多个声明错误。
1条答案
按热度按时间jc3wubiy1#
是的,它们是包含头文件的每个编译单元的独立全局变量。
你会得到多重声明错误,因为你将头文件包含在多个编译单元(或源 *.c文件)中。每次你将头文件包含在源文件中,变量a,b,c,d,e都会被示例化。当你的各个编译单元都有相同命名的但不同的变量时,这会导致链接错误。
你应该尽可能地减少变量的作用域。如果
a
只在source1.c的func1()中需要,那么在func1()中声明a
为static int a;
。static关键字将确保变量在func1()调用中保持其值,就像它是一个全局变量一样:字符串