c语言头文件能否相互包含?

penghongyu1989 2010-12-23 10:06:37
一个工程中bsp.h 包含 LocDongle.h, LocDongle.h又包含bsp.h,这样行不行?头文件保护有用吗,应该没用吧
...全文
1881 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈思有 2011-05-16
  • 打赏
  • 举报
回复
没有满意答案
rolax 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 prohibit 的回复:]

在文件bsp.h和LocDongle.h中这样写就可以避免重复包含了:C/C++ code
//bsp.h
#ifndef _BSP_H_
#define _BSP_H_
#include "LocDongle.h"
#endif

//LocDongle.h
#ifndef _LOCDONGLE_H_
#define _LOCDONGLE_H_
#include "bsp.h"
#endif……
[/Quote]

赞一个
flysnowhite 2010-12-23
  • 打赏
  • 举报
回复
不可以。可以把公共部分提取出来,单独作为一个头文件。
JZY4077 2010-12-23
  • 打赏
  • 举报
回复
回复14楼:

我说的那个嵌套问题不是说可以无限的嵌套,标准要求c编译器必须支持至少8层的头文件嵌套 ,并没有限定嵌套深度的最大值。

而事实上我们没有什么理由让嵌套深度超过1层或者2层!!!

旭子 2010-12-23
  • 打赏
  • 举报
回复
error: #include nested too deeply
JZY4077 2010-12-23
  • 打赏
  • 举报
回复
我觉得头文件的嵌套应该是没有什么问题的,但是头文件的嵌套如果你没有加上编译预处理的选项,则会出现一个无限的循环,因此这个应该很重要的!!!头文件的嵌套一定要防止不断的包含,处于一个无限的循环!
darkofday 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 prohibit 的回复:]

在文件bsp.h和LocDongle.h中这样写就可以避免重复包含了:C/C++ code
//bsp.h
#ifndef _BSP_H_
#define _BSP_H_
#include "LocDongle.h"
#endif

//LocDongle.h
#ifndef _LOCDONGLE_H_
#define _LOCDONGLE_H_
#include "bsp.h"
#endif……
[/Quote]
这样不行吧。。。还是会出现先有蛋还是先有鸡的问题,不管用哪种方式,还是得把共用的那部分独立出来,单独加上宏保护也行。
無_1024 2010-12-23
  • 打赏
  • 举报
回复
不能包含 但是可以通过预编译解决这个问题
就想叫yoko 2010-12-23
  • 打赏
  • 举报
回复
头文件保护有用, 可以这样重复包含
头文件包含其实就是在包含的位置展开它而已,
你如果a.h包含了b.h
b.h又包含了a.h
如果你使用了#ifndef.. #define...#endif的话
你在一个.c文件中包含a.h那么它里面包含的b.h中包含的a.h将不会重复包含
prohibit 2010-12-23
  • 打赏
  • 举报
回复
在文件bsp.h和LocDongle.h中这样写就可以避免重复包含了:
//bsp.h
#ifndef _BSP_H_
#define _BSP_H_
#include "LocDongle.h"
#endif

//LocDongle.h
#ifndef _LOCDONGLE_H_
#define _LOCDONGLE_H_
#include "bsp.h"
#endif
  • 打赏
  • 举报
回复
加预处理#ifndef.. #define...#endif
darkofday 2010-12-23
  • 打赏
  • 举报
回复
这样不行吧,不过你可以将两个头文件共用的那一部分抽出来单独建一个头文件
sbdt123 2010-12-23
  • 打赏
  • 举报
回复
可以吧
Meteor_Code 2010-12-23
  • 打赏
  • 举报
回复
不可以,逻辑上都不能通过
需要用到互包含的时候,都可以用简单包含解决,不知道LZ是因为什么?
Bizet 2010-12-23
  • 打赏
  • 举报
回复
头文件保护木有用 抽象出一个泛型使用
谁学逆向工程 2010-12-23
  • 打赏
  • 举报
回复
只能在CPP里包含.H
bobo364 2010-12-23
  • 打赏
  • 举报
回复
兄弟,用的时候include两次不就得了吗,干嘛那么费劲的搞嵌套
hywangw 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaoyuanyuan2009 的回复:]

只能在CPP里包含.H
[/Quote]
乱说
prohibit 2010-12-23
  • 打赏
  • 举报
回复
//bsp.h
#ifndef _BSP_H_//文件开始、第一行
#define _BSP_H_
#include "LocDongle.h"
...//内容,所有的函数声明等等放这里
#endif//文件末尾

//LocDongle.h
#ifndef _LOCDONGLE_H_//文件开始、第一行
#define _LOCDONGLE_H_
#include "bsp.h"
...//内容,所有的函数声明等等放这里
#endif//文件末尾
prohibit 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 darkofday 的回复:]
引用 9 楼 prohibit 的回复:

在文件bsp.h和LocDongle.h中这样写就可以避免重复包含了:C/C++ code
//bsp.h
#ifndef _BSP_H_
#define _BSP_H_
#include "LocDongle.h"
#endif

//LocDongle.h
#ifndef _LOCDONGLE_H_
#define _LOCDO……
[/Quote].c文件中包含.h文件时,要么包含bsp.h、要么包含LocDongle.h、要么都包含,不管是哪一种情况,.c文件里总有个引用头文件的包含顺序,是先有鸡还是先有蛋就看这个顺序咯,要不只有两个头文件而没有其他文件调用、那定义这两个头文件来干啥~~
加载更多回复(1)

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧