头文件礼仪

Pra*_*att 7 c c++

当我创建一个将由多个开发人员使用的头文件时,根据其中使用的所有定义和声明,使该头文件自给自足是一种良好的编程习惯.

例如:

头文件1:types.h

#ifndef TYPES_H
#define TYPES_H
typedef unsigned int uint16
#endif
Run Code Online (Sandbox Code Playgroud)

头文件2:myheader.h

#ifndef MYHEADER_H
#define MYHEADER_H
uint16 myfunc(void);
#endif
Run Code Online (Sandbox Code Playgroud)

我在myheader.h中使用了uint16而没有包含types.h.因此,如果有人想在他们的源文件中包含myheader.h,他们应首先包含"types.h",然后包含"myheader.h".因此,这实际上是迫使开发人员按特定顺序包含头文件.我一直认为这是一种不好的做法,但我今天在我公司遇到了一些代码,在一个文件中声明了一个函数,你需要包含至少4个其他头文件.所以现在我很困惑,我错过了什么,是否有任何地方可以认为这是预期的行为.

Luc*_*ore 5

用不必要的类型污染全局命名空间是不好的做法.您可以做的最好的事情是尽可能提供前向声明,并include在必要时提供其他文件.在简化的情况下,您应该包含在uint16使用它的每个标头中定义的标头.

例如,如果您可以向前声明类型,那么这是首选.理由是如果你实际上没有使用这种类型,前向声明就足够了.如果你确实使用了这个类型,应该包含明确声明它的标题.

  • @RafaelBaptista不是真的,没有.如果你更改了它的名字,你无论如何都必须这样做.如果你不改名,就没问题了. (2认同)