2012-05-03 42 views
6

Tôi hiện đang sử dụng ba máy chủ (triển khai, live_testing và địa phương). Tôi đang sử dụng macro để xác định một serie các địa điểm miền:Xác định lại macro mục tiêu-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 

... 

Vấn đề tôi đang gặp những vấn đề biên dịch liên quan đến việc xác định lại DOMAIN và DOMAINCOMET. Có cách giải quyết nào cho các cảnh báo này không?

Cảm ơn trước, Clinton

Trả lời

11

#undef là bạn của bạn:

#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

Thanks, điều này làm việc tốt và giải quyết vấn đề cảnh báo trình biên dịch ban đầu của tôi. Tôi đã có một số vấn đề định nghĩa lại khác do khung của RestKit ở đâu đó bằng cách sử dụng cùng một macro "DOMAIN". – r1d3h4rd

1

Nếu bạn đang nhận lỗi định nghĩa lại, bạn phải xác định các chi tiết vĩ mô hơn một lần. Nếu mã này là nơi duy nhất mà DOMAINDOMAINCOMET được xác định, thì có thể cả hai cờ điều khiển của bạn đều được đặt.

Điều này có thể xảy ra nếu cả hai __PRODUCTION__LIVE_TESTING được định nghĩa với bất kỳ giá trị - thậm chí 0 kể từ khi bạn đang sử dụng #ifdef để xem nếu chúng được định nghĩa, và không kiểm tra giá trị thực tế được giao.

Ví dụ, ngay cả:

#define __PRODUCTION 0 
#define __LIVE_TESTING 1 

sẽ gây ra cả hai khối để được đánh giá theo mã của bạn, và do đó gây ra lỗi định nghĩa lại.

Nếu bạn muốn hai là loại trừ lẫn nhau, bạn nên kiểm tra giá trị của họ, do đó:

#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 
Các vấn đề liên quan