7

現在、3 つのサーバー (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 の再定義に関連するコンパイラの問題です。これらの警告に対する回避策はありますか?

前もって感謝します、クリントン

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が任意の値に定義されている場合に発生する可能性があります。#ifdefそれらが定義されているかどうかを確認するために使用しており、割り当てられている実際の値をテストしていないため、0 であっても同様です。

たとえば、次のこともできます。

#define __PRODUCTION 0
#define __LIVE_TESTING 1

コードに従って両方のブロックが評価されるため、再定義エラーが発生します。

2 つを相互に排他的にしたい場合は、それらの値を確認する必要があります。

#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 に答える