永发信息网

c语言头文件包含、全局变量使用问题

答案:6  悬赏:60  手机版
解决时间 2021-11-22 04:11
  • 提问者网友:送舟行
  • 2021-11-21 15:33
c语言头文件包含、全局变量使用问题
最佳答案
  • 五星知识达人网友:醉吻情书
  • 2021-11-21 15:39
C语言在头文件中包含全局变量有三种形式:
1 在头文件中声明一个全局变量,在一个C文件中定义全局变量,然后在所有的引用了这个头文件的C文件里都可以使用该全局变量值。
如在main.c定义
int a = 3;
然后定义一个main.h,那么所有引用main.h的c文件中,均可以访问a并更改其值。

2 在头文件中定义一个静态全局变量。那么所有引用该头文件的C文件,均拥有一个作用域在本文件范围内的同名静态全局变量。不同文件中的该变量虽然同名,但却是不同的变量。
比如在a.h中定义
static int a = 3;
那么在a.c中引用a.h,并将a值修改为4。
在b.c中也引用a.h,不对a值做修改,打印a值,仍为3, 不会因为a.c中的修改而改变值。

3 在头文件中定义全局变量。该头文件仅可以被一个C文件引用一次。
比如a.h中定义
int a = 3;
在a.c中可以引用a.h,并对a进行访问和修改。
如果在同项目下有b.c引用了a.h,编译器在链接时会报同名全局变量的错误,导致编译失败。
全部回答
  • 1楼网友:青灯有味
  • 2021-11-21 19:27
我试过了 第一种个情况可以编译通过 而且答案也是正确的
  • 2楼网友:琴狂剑也妄
  • 2021-11-21 18:51
.h头文件中一般只做变量或者函数的声明,而赋值一般放到.c文件中,这样就不会出错了追问这种写法错误在哪呢?追答会出现重复定义
  • 3楼网友:山河有幸埋战骨
  • 2021-11-21 18:11
A.h:
int g=3;
B.c: #include"A.h"
#include

int main()

{
int g=2; //这里会出现错误

printf("%d\n",g);

return 0;

}

因为B.c中的
#include"a.h"相当于把a.h中的内容拷贝过来
相当于b,c的内容是
int g=3;
#include

int main()

{
int g=2; //如果这样写当然就会出现错误了

printf("%d\n",g);

return 0;

}追问但是我 所有.h文件都用了ifndefine/define/endif追答#ifndefine A_H
#define A_H
int g=3;
#endif

ifndefine/define/endif这些关键字只是用来告诉GCC该怎么编译,它实际上并非C语言代码

#ifndefine A_H //GCC看来这一行就检查是否定义了A_H,
//如果定义了,那么到endif中间的东西编译器就不会编译了,相当于if语句;
//头文件中加这个,只是防止程序中多次#include"a.h"时出错
#define A_H
int g=3;
#endif
#include

int main()

{
//#ifndefine A_H 加上这两句,编译器发现已经定义了A_H 就不会编译下面一行了
int g=2; //如果这样写当然就会出现错误了
//#endif
printf("%d\n",g);

return 0;

}
  • 4楼网友:罪歌
  • 2021-11-21 17:56
头文件是对本文件的一个说明!
所以在这里我们可以说是h文件内的int g是在给c中的int g= 3做一个说明!
但是如果你在c中没有对应的int g的说明!那么这个h文件里的int g是不合法的!
  • 5楼网友:千夜
  • 2021-11-21 16:49
int g=3为显示的赋值,很多编译器容易出错,应该先声明 在赋值,int g;g=3;
A.h:
int g;
A.c:int g=3;两次声明,不能多次声明统一变量,应该
A.h:
int g;
A.c: g=3;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯