单个头文件,包含所有其他头文件?

时间:2014-06-06 13:49:58

标签: c++ objective-c oop header-files

从面向对象的角度(主要是C ++和目标C),

将项目中使用的所有头文件包含在单个(.h)中是一种很好的编程习惯,只需在所有实现文件中包含此头文件以及(#)使用"头部保护& #34;和" #pragma一次" (或#import)?

这可能是什么负面影响?

1 个答案:

答案 0 :(得分:5)

这是一个非常糟糕的主意。它会彻底减慢你的编译过程。如果您有多个标题需要访问每个文件或大多数文件,请检查预编译的头文件(xCode中的.pch)。这是正确的方法。

扩展答案:在创建课程时,您希望在.h文件中包含尽可能少的标题。将它们放在.m中会更好,因为它们不会影响包含标题的其他类的编译时间。当您需要事先知道它的大小时,您只需要在.h中完整定义类型。但是你总是知道指针的大小,所以前向声明就足够了:

MyObject.h

#import "MyStruct.h"

@class Foo;  //Forward declaration of Foo.

@class MyObject
{
    Foo *foo; //No problem, you know the size. You can import Foo.h in MyObject.m
    MyStruct struct; //Oops, this is not a pointer. You need to import it's definition right here.
}
@end

MyObject.m

#import "MyObject.h"
#import "Foo.h"

...

- (void)doStuffWithFoo
{
    [foo doStuff]; //If you don't import Foo.h, this will throw a compiler error.
}