2012-05-03 11 views
6

現在、3つのサーバー(deploy、live_testing、およびlocal)を使用しています。私は、ドメインの場所のセリエを定義するためのマクロを使用しています :Objective-Cマクロの再定義

#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の再定義に関するコンパイラの問題です。 これらの警告の回避策はありますか?事前に

おかげで、 クリントン

答えて

11

#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 
+0

おかげで、これはうまく働いたと私の最初のコンパイラの警告の問題を解決しました。私は、RestKitのフレームワークのどこかで同じ "DOMAIN"マクロを使用しているため、いくつかの再定義の問題がありました。 – r1d3h4rd

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 
関連する問題