提问人:rachit juthani 提问时间:10/22/2023 最后编辑:HolyBlackCatrachit juthani 更新时间:10/27/2023 访问量:48
是 .h 文件中的变量全局变量
Are variables in .h file global variables
问:
有一个 tim.h 文件,其中包含 5 个 int 变量:int a;国际 b ;国际 C ;int d 国际 d ;int e; .我将tim.h包含在myfile.c文件中。
myfile.c 有 4 个函数: void func1();无效 func2();无效 func3() ;无效 func4();
现在我一开始就包括 tim.h。
现在 a,b,c,d,e 是否成为全局变量,如果我希望“a”仅是 func1() 的本地变量,我应该只在该函数中定义和声明“a”,而不是在 .h 文件中?
在文件之间获取多个声明错误。
答:
0赞
DarkFranX
10/27/2023
#1
是的,对于包含标头的每个编译单元,它们都是独立的全局变量。
您收到多重声明错误,因为您将头文件包含在多个编译单元(或源 *.c 文件)中。每次在源文件中包含头文件时,变量 a、b、c、d、e 都会被实例化。因此,当各种编译单元都具有相同名称但不同的变量时,这会导致链接错误。
应尝试尽可能缩小变量范围。如果仅在 source1.c 的 func1() 中需要,则在 func1() 中声明为 .static 关键字将确保变量在 func1() 调用中保持其值,就好像它是全局变量一样:a
a
static int a;
void func1(void)
{
static int a;
...
}
评论
extern int a, b, c, d, e;
.c
a