将#define
预处理程序语句放在头文件(.h)
中而不是实现文件(.m)
中有什么好处吗?
我有遗留代码,其中包含#define
个语句。这些陈述是否受范围影响?
答案 0 :(得分:0)
不太可能产生任何明显的差异,但如果#define
仅在一个类中需要,则将其放入.m文件中,如果导入该类的任何内容需要知道它将它放在.h中文件。
假设您有两个课程Foo
和Bar
,Bar.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
文件,那么问题是这些常量是否对更广泛的上下文有用。
最重要的是,我不建议仅仅为了将它们保持在一起而将它们合并到一个区域。让常量的功能意图决定它的去向。