Objective-C宏重新定义

时间:2012-05-03 12:28:52

标签: iphone objective-c rest macros dns

我目前正在使用三台服务器(deploy,live_testing和local)。 我正在使用宏来定义一系列域名:

#define __LIVE_TESTING // Here I chose what domain to use

#ifdef __PRODUCTION
#define DOMAIN @"http://192.168.10.228/rest/"
#define DOMAINCOMET @"http://192.168.10.228/"
#endif

#ifdef __LIVE_TESTING
#define DOMAIN @"http://192.168.10.229/rest/"
#define DOMAINCOMET @"http://192.168.10.229/"
#endif

...

我遇到的问题是与重新定义DOMAIN和DOMAINCOMET有关的编译器问题。 这些警告是否有解决方法?

提前致谢, 克林顿

2 个答案:

答案 0 :(得分:12)

#undef是你的朋友:

#ifdef __LIVE_TESTING

    #if defined(DOMAIN) && defined(DOMAINCOMET)
        #undef DOMAIN
        #undef DOMAINCOMET
    #endif

    #define DOMAIN @"http://192.168.10.229/rest/"
    #define DOMAINCOMET @"http://192.168.10.229/"

#endif 

答案 1 :(得分:1)

如果要获得重新定义错误,则必须多次定义宏。如果此代码是DOMAINDOMAINCOMET定义的唯一位置,则可能会设置两个控制标志。

如果将__PRODUCTION__LIVE_TESTING都定义为任何值,则可能会发生这种情况 - 即使为0,因为您使用#ifdef来查看它们是否已定义,并且未测试实际值被分配。

例如,偶数:

#define __PRODUCTION 0
#define __LIVE_TESTING 1

将导致根据您的代码评估两个块,从而触发重新定义错误。

如果你想让两者互相排斥,你应该检查它们的价值,因此:

#if __PRODUCTION==1
#define DOMAIN @"http://192.168.10.228/rest/"
#define DOMAINCOMET @"http://192.168.10.228/"    
#elif __LIVE_TESTING==1
#define DOMAIN @"http://192.168.10.229/rest/"
#define DOMAINCOMET @"http://192.168.10.229/"
#endif