C语言 是.h文件中的变量全局变量

pinkon5k  于 2023-11-16  发布在  其他
关注(0)|答案(1)|浏览(145)

有一个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文件中?
获取文件之间的多个声明错误。

jc3wubiy

jc3wubiy1#

是的,它们是包含头文件的每个编译单元的独立全局变量。
你会得到多重声明错误,因为你将头文件包含在多个编译单元(或源 *.c文件)中。每次你将头文件包含在源文件中,变量a,b,c,d,e都会被示例化。当你的各个编译单元都有相同命名的但不同的变量时,这会导致链接错误。
你应该尽可能地减少变量的作用域。如果a只在source1.c的func1()中需要,那么在func1()中声明astatic int a;。static关键字将确保变量在func1()调用中保持其值,就像它是一个全局变量一样:

void func1(void)
{
    static int a;
    ...
}

字符串

相关问题