在报头(.h)文件中放置#define语句有什么好处?

时间:2017-09-20 15:01:20

标签: objective-c scope preprocessor

#define预处理程序语句放在头文件(.h)中而不是实现文件(.m)中有什么好处吗?

我有遗留代码,其中包含#define个语句。这些陈述是否受范围影响?

2 个答案:

答案 0 :(得分:0)

不太可能产生任何明显的差异,但如果#define仅在一个类中需要,则将其放入.m文件中,如果导入该类的任何内容需要知道它将它放在.h中文件。

假设您有两个课程FooBarBar.m导入Foo.h。在处理#define时,预处理器将读取Foo.h中的任何Bar#define中未使用的任何Bar对于预处理器来说都是没有意义的。 #define中的任何Foo.m只有在预处理器处理Foo时才会被读取,因为没有任何内容导入该文件。

答案 1 :(得分:0)

#define文件中使用.h除了明显地使它们在多个.m文件中可用之外没有任何好处。

因此,如果它可能(即使您还没有这样做)对多个.m文件有用,那么请输入.h文件。如果它只对单个.m文件有价值,那么将其放在.m文件中。

以上的推论:避免在多个#define文件中重复.m:如果您在多个#define文件中拥有相同的.m,那么这是应该在.h文件中的内容。

在评论中,您考虑是否存在“将[他们]组合在一起”的负面影响。如果你正在考虑将它们移到.h文件中,我会劝阻它。保持范围尽可能窄/合乎逻辑。如果您正在考虑将它们移动到.m文件,那么问题是这些常量是否对更广泛的上下文有用。

最重要的是,我不建议仅仅为了将它们保持在一起而将它们合并到一个区域。让常量的功能意图决定它的去向。