【问题标题】:Objective-C Macro RedefinitionObjective-C 宏重定义
【发布时间】:2012-05-12 23:15:22
【问题描述】:

我目前正在使用三台服务器(部署、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 有关的编译器问题。 这些警告是否有解决方法?

提前致谢, 克林顿

【问题讨论】:

    标签: iphone objective-c rest macros dns


    【解决方案1】:

    #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 
    

    【讨论】:

    • 谢谢,这很好,解决了我最初的编译器警告问题。由于 RestKit 的框架在某处使用相同的“DOMAIN”宏,我遇到了其他一些重新定义问题。
    【解决方案2】:

    如果您遇到重新定义错误,则必须多次定义宏。如果此代码是定义 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多