7

我目前正在使用三台服务器(部署、live_testing 和本地)。我正在使用宏来定义一系列域位置:

#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 有关的编译器问题。这些警告是否有解决方法?

在此先感谢克林顿

4

2 回答 2

13

#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 
于 2012-05-03T12:32:37.177 回答
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
于 2012-05-03T12:49:33.010 回答