2010-08-02 19 views
44

Tôi tự hỏi nếu nó có thể có một tiền xử lý OR hoặc tuyên bố? Tôi có mã này nơi tôi muốn chạy theo các thẻ _DEBUG hoặc _UNIT_TEST (?).Các toán tử boolean có thể được sử dụng với bộ tiền xử lý không?

giống như sau gì tôi muốn là:

#if _DEBUG || _UNIT_TEST 
    //Code here 
#endif 

Nếu đây là không thể, là có một cách giải quyết để đạt được điều tương tự mà không cần phải lặp lại mã sử dụng một #elseif?

Trả lời

60
#if defined _DEBUG || defined _UNIT_TEST 
    //Code here 
#endif 

Bạn cũng có thể sử dụng toán tử AND và NOT. Ví dụ:

#if !defined _DEBUG && defined _UNIT_TEST 
    //Code here 
#endif 
3
#if defined(_DEBUG) || defined(_UNIT_TEST) 
    //Code here 
#endif 

Ngoài ra cho các hồ sơ, đó là #elif, không #elseif.

6

#if mất bất kỳ Biểu thức C++ nào của loại tích phân (1) mà trình biên dịch quản lý để đánh giá tại thời gian biên dịch. Vì vậy, có, bạn có thể sử dụng ||&&, miễn là bạn sử dụng defined(SOMETHING) để kiểm tra tính xác định.

(1): tốt, nó bị hạn chế hơn một chút so với điều đó; để xem nitty-gritty, hãy xem các hạn chế here (tại "với các hạn chế bổ sung này").

Các vấn đề liên quan