我目前正在使用三台服务器(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有关的编译器问题。 这些警告是否有解决方法?
提前致谢, 克林顿
答案 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)
如果要获得重新定义错误,则必须多次定义宏。如果此代码是DOMAIN
和DOMAINCOMET
定义的唯一位置,则可能会设置两个控制标志。
如果将__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