将#undef放在#define之前有什么好处

时间:2013-01-15 02:02:14

标签: objective-c

我正在使用另一个代码用于学习目的,我找到了这些我知道其含义的行。

 #undef TAG
#define kTAG @"TestRegistration///: "
#define TAG kTAG

我的问题是:如果从未使用TAG,为什么#dedef TAG在#define之前呢?

2 个答案:

答案 0 :(得分:3)

在某些版本的C中,除非定义与前一个声明完全相同,否则重新声明宏是非法的。

因此,这只是防御性编码以防止此问题(尽管快速测试表明此限制不会出现在Objective-C中)。

答案 1 :(得分:2)

如果之前未定义宏,则没有理由这样做。但是,如果您希望宏可以先定义,那么首先取消它是一个好主意,因为它使代码的读者清楚地想要覆盖以前设置的宏值(如果有的话)。

如果您不希望已经定义了宏,则不应首先使用undef。这样,如果它(令人惊讶!)已经定义,你会收到警告。