在 header (.h) 文件中放置 #define 语句有什么好处?
What are the benefits of placing a #define statement in a header (.h) file?
与实现文件 (.m)
相比,将 #define
预处理器语句放在 header 文件 (.h)
中有什么好处吗?
我有遗留代码,其中散布着 #define
语句。这些语句是否受范围影响?
不太可能产生任何明显的差异,但如果 #define
仅在一个 class 中需要,则将其放入 .m 文件中(如果需要导入 class)要了解它,请将其放入 .h 文件中。
假设您有两个 classes Foo
和 Bar
,Bar.m
导入 Foo.h
。 Foo.h
中的任何 #define
都将在处理 Bar
时由预处理器读取。 Bar
中未使用的任何 #define
对预处理器读取毫无意义。 Foo.m
中的任何 #define
只会在预处理器处理 Foo
时被读取,因为没有任何内容导入该文件。
在 .h
文件中包含 #define
没有任何好处,显然,除了使它们在多个 .m
文件中可用之外。
因此,如果它可能(即使您还没有这样做)可能对多个 .m
文件有用,则将其放入 .h
文件中。如果它只对单个 .m
文件有价值,则将其放入 .m
文件中。
以上推论:避免在多个 .m
文件中重复 #define
:如果在多个 .m
文件中有相同的 #define
,那么这是应该在 .h
文件中的候选对象。
在评论中你考虑是否有"negative impact to grouping [them] together"。如果您打算将它们移动到 .h
文件,我不赞成这样做。将范围缩小到 possible/logical。如果您正在考虑将它们移动到 .m
文件,问题是这些常量中的任何一个是否对更广泛的上下文可能有用。
最重要的是,我不建议仅仅为了将它们放在一起而将它们合并到一个区域。让常量的功能意图决定它的去向。
与实现文件 (.m)
相比,将 #define
预处理器语句放在 header 文件 (.h)
中有什么好处吗?
我有遗留代码,其中散布着 #define
语句。这些语句是否受范围影响?
不太可能产生任何明显的差异,但如果 #define
仅在一个 class 中需要,则将其放入 .m 文件中(如果需要导入 class)要了解它,请将其放入 .h 文件中。
假设您有两个 classes Foo
和 Bar
,Bar.m
导入 Foo.h
。 Foo.h
中的任何 #define
都将在处理 Bar
时由预处理器读取。 Bar
中未使用的任何 #define
对预处理器读取毫无意义。 Foo.m
中的任何 #define
只会在预处理器处理 Foo
时被读取,因为没有任何内容导入该文件。
在 .h
文件中包含 #define
没有任何好处,显然,除了使它们在多个 .m
文件中可用之外。
因此,如果它可能(即使您还没有这样做)可能对多个 .m
文件有用,则将其放入 .h
文件中。如果它只对单个 .m
文件有价值,则将其放入 .m
文件中。
以上推论:避免在多个 .m
文件中重复 #define
:如果在多个 .m
文件中有相同的 #define
,那么这是应该在 .h
文件中的候选对象。
在评论中你考虑是否有"negative impact to grouping [them] together"。如果您打算将它们移动到 .h
文件,我不赞成这样做。将范围缩小到 possible/logical。如果您正在考虑将它们移动到 .m
文件,问题是这些常量中的任何一个是否对更广泛的上下文可能有用。
最重要的是,我不建议仅仅为了将它们放在一起而将它们合并到一个区域。让常量的功能意图决定它的去向。