一个头文件包含另外一个头文件的问题?

yanyulan 2001-10-18 03:56:04
对于C++中一个头文件中能否包含另外一个头文件的问题,以下有两种观点:
1.绝对不允许,因为所有头文件相互包含的情况都可以用在相应cpp文件中包含的方式替代
2.区别对待,某些情况下允许,某些情况下应当避免
希望各位高手发表自己的意见并且给出充分的理由和实例
...全文
855 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
SlaSk 2001-10-31
  • 打赏
  • 举报
回复
我喜欢那样用,因为。。。。不那样用有些自己写的头文件过不去。。。
不过要加个:#pragma once
xwu 2001-10-30
  • 打赏
  • 举报
回复
To: yanyulan()
硬性规定 "不允许头文件相互包含" 是不太合理的. 在很多情况下, 一个头文件中包含另外一个头文件是不可避免的. 例如模板类,整个就是一个头文件, 要使用它, 就必须包含整个头文件. 还有, 如果类A的头文件里定了inline function, 而且inline function调用了类B的函数, 就必须包含B的头文件.See below:

//File A.h: Forward declaration does not work here.
#include "B.h"

class A
{
...
B *b;
inline void set(){b->set();}
};
baolqun 2001-10-19
  • 打赏
  • 举报
回复
no_limit(no_limit) (2001-10-18 19:42:21) 得0分
同意 ybchen() ,一点补充,对于aaa.h,可能更常用的是:AAA_H,当然了,不限制!!


和我们老师说的一样

dogandcat 2001-10-19
  • 打赏
  • 举报
回复
这个要具体问题具体对待, 贵公司的规范要求不允许头文件互相包含, 可能是考虑到程序的可读性以及可维护性, 但从技术角度看互相包含头文件的一些问题是可以避免的.
yanyulan 2001-10-19
  • 打赏
  • 举报
回复
对不起各位,现在的问题是,我公司的c/c++编码规范中,明确规定:不允许头文件相互包含(即一个头文件中包含另外一个头文件,并非指循环包含)。所以我想在这里请大家发表自己的见解。
sxxny 2001-10-18
  • 打赏
  • 举报
回复
绝对用许,I THINK
不然的话我们用一个头文件事岂不还必须考虑那个头文件里面还需要包含什么头文件吗?
真是不可思议!!
yanyulan 2001-10-18
  • 打赏
  • 举报
回复
对不起各位,我的意思是:C++语法当然是允许头文件相互包含,但从编程风格来说,各位更倾向于哪一种,各自的优缺点分别是什么?
no_limit 2001-10-18
  • 打赏
  • 举报
回复
同意 ybchen() ,一点补充,对于aaa.h,可能更常用的是:AAA_H,当然了,不限制!!
gffly 2001-10-18
  • 打赏
  • 举报
回复
可以
  • 打赏
  • 举报
回复
允许的,例如下面的 aaa.h 包含 bbb.h , bbb.h 包含 aaa.h,这些也是 .h 文件的标准写法

//------------------
//aaa.h
#ifndef _aaa_h_ybchen_
#define _aaa_h_ybchen_

#include <stdio.h>
#include "bbb.h"

extern int a1;
extern void a2(int x);
//.....

#endif

//------------------
//bbb.h
#ifndef _bbb_h_ybchen_
#define _bbb_h_ybchen_

#include <stdio.h>
#include "aaa.h"

extern int b1;
extern int b2(int x);
//.....

#endif

//------------------
//aaa.cpp
int a1 = 0;
void a2(int x);
{
//...
}

//-------------
//bbb.cpp
int b1 = 0;
int b2(int x);
{
//....
}
lzumcj 2001-10-18
  • 打赏
  • 举报
回复
C++是允许头文件嵌套的
xwu 2001-10-18
  • 打赏
  • 举报
回复
我决得是允许的. 很多STL implementation 就这么干.

当然, 如果能用简单的forward declaration 解决的就应该避免在一个头文件包含另外一个头文件.

70,014

社区成员

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

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