单个标头,包括其他标头

最近,我遇到了管理标头的方法。 无法在互联网上找到有关其问题的更多信息,所以决定在这里问一下。

想象一下,你有一个程序,你有main.c ,还有其他来源和标题,如: person.c, person.h, settings.c, settings.h, maindialog.c, maindialog.h, othersource.c, othersource.h

有时settings.c可能需要person.c和main maindialog.c

有时某些其他源可能需要包含其他源文件。 通常一个人会在settings.c内做:

 //settings.c #include "person.h" #include "maindialog.h" 

但是,我遇到了一个方法,其中有一个global.h并在其中:

 //global.h //all headers we need #include "person.h" #include "maindialog.h" #include "settings.h" #include "otherdialog.h" 

现在,从每个其他源文件中您只需要包含"global.h"并且您已完成,您将从各自的源文件中获取function。 这种方法与一个global.h头有一些实际问题吗?

这是为了取悦迂腐的纯粹主义者和懒惰的极简主义者。 如果所有子标题都以正确的方式完成,那么通过global.h没有任何function损害,只有可能的编译时间增加。

副标题有点像

 #ifndef unique_token #define unique_token #pragma once // the useful payload #endif 

如果有所有源文件需要的公共头文件(如config.h),则可以这样做。 (但是像预编译头一样使用它…)

但是通过包含不必要的标头,实际上增加了编译时间。 所以,如果你有一个非常大的项目,并且每个源文件包含所有标题,编译时间可能会很长……

除非必须,否则我建议不要包含标题。 即使您使用类型,但仅用于指针或引用(尤其是在标题中),更喜欢使用fwd声明而不是include。