Code Bye

关于什么情况下不需要include 头文件

include 头文件 有两种情况
1. 有头文件A  头文件B
在头文件B中include头文件A
2. 有头文件A  c文件D
假如头文件B或c文件D要用到 头文件A里面声明的东西话,我们都要include头文件A。但是后来发现有时候不include 头文件A,也是可以用到A里面声明的东西,例如一些宏定义,不知道是不是makefile里面有些东西让它其作用。
想问一下大家一下,哪些东西定义在头文件中,即使本人不include头文件A, 也是可以在头文件B和c文件D中用。
解决方案

120

https://www.zhihu.com/question/38235552

10

引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:

不行的,要用extern
而且头文件里尽量不要定义变量,原因是很容易出现重定义

是的 头文件 可以用来声明变量 最好不要定义变量
假设在头文件A中声明一个全局变量  头文件B 用到 但是并不include 头文件A  这种情况能否可以 (假如可以的话,就和宏的枪框一样了)
注意是全局变量 不是局部变量

不行

谢谢你这么多次的回答,能否解释一下为什么只有宏可以做到 而其他变量却不能,是在编译的时候或运行的时候,有些地方不允许变量这样吗?
除了宏,您还知道其他参数可以做到和宏一样的吗?

和宏毫无关系,头文件本身是不需要编译的,只要cpp里面的全部变量能自解释就行了,这就是为什么很多人的头文件内容都不全,想复用的时候编都编不过。

20

假如你A B C三个文件,B包含了A,C再包含B,那么相当于C也包含了A

20

头文件.h,c 文件.c
本质上,都是文本文件
分为.h,.c 只是为了方便
你也可以 把头文件的东西,全部放到.c
不过,容易被误解为真正的.c
头文件往往不含实现代码
编译它是多余的,包含头文件,往往是把头文件的代码复制一份到.c 生成新的文件
然后编译新的文件
假如把.c存储为.h,并且用于包含
自动编译的时候,往往会出问题

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于什么情况下不需要include 头文件