我正在使用另一个代码用于学习目的,我找到了这些我知道其含义的行。
#undef TAG
#define kTAG @"TestRegistration///: "
#define TAG kTAG
我的问题是:如果从未使用TAG,为什么#dedef TAG在#define之前呢?
答案 0 :(得分:3)
在某些版本的C中,除非定义与前一个声明完全相同,否则重新声明宏是非法的。
因此,这只是防御性编码以防止此问题(尽管快速测试表明此限制不会出现在Objective-C中)。
答案 1 :(得分:2)
如果之前未定义宏,则没有理由这样做。但是,如果您希望宏可以先定义,那么首先取消它是一个好主意,因为它使代码的读者清楚地想要覆盖以前设置的宏值(如果有的话)。
如果您不希望已经定义了宏,则不应首先使用undef。这样,如果它(令人惊讶!)已经定义,你会收到警告。