Trong C ++, đây là:
#ifdef A && B
giống như:
#if defined(A) && defined(B)
?
Tôi đã nghĩ rằng nó không phải, nhưng tôi đã không thể tìm thấy sự khác biệt với trình biên dịch của mình (VS2005).
Trong C ++, đây là:
#ifdef A && B
giống như:
#if defined(A) && defined(B)
?
Tôi đã nghĩ rằng nó không phải, nhưng tôi đã không thể tìm thấy sự khác biệt với trình biên dịch của mình (VS2005).
Câu trả lời:
Chúng không giống nhau. Cái đầu tiên không hoạt động (tôi đã thử nghiệm trong gcc 4.4.1). Thông báo lỗi là:
test.cc:1:15: cảnh báo: mã thông báo bổ sung ở cuối chỉ thị #ifdef
Nếu bạn muốn kiểm tra xem nhiều thứ đã được xác định chưa, hãy sử dụng cái thứ hai.
Bạn có thể sử dụng toán tử đã xác định trong chỉ thị #if để sử dụng các biểu thức đánh giá thành 0 hoặc 1 trong một dòng tiền xử lý. Điều này giúp bạn không sử dụng các chỉ thị tiền xử lý lồng nhau. Các dấu ngoặc đơn xung quanh mã định danh là tùy chọn. Ví dụ:
#if defined (MAX) && ! defined (MIN)
Nếu không sử dụng toán tử đã xác định, bạn sẽ phải bao gồm hai lệnh sau để thực hiện ví dụ trên:
#ifdef max #ifndef min
Các kết quả sau giống nhau:
1.
#define A
#define B
#if(defined A && defined B)
printf("define test");
#endif
2.
#ifdef A
#ifdef B
printf("define test");
#endif
#endif
#else
, có thể gây ra sự cố. Chỉ có tùy chọn đầu tiên thực sự có nghĩa chính xác những gì người hỏi yêu cầu.
Đối với những người có thể đang tìm kiếm ví dụ (UNIX / g ++) hơi khác so với OP, điều này có thể giúp ích:
`
#if(defined A && defined B && defined C)
const string foo = "xyz";
#else
#if(defined A && defined B)
const string foo = "xy";
#else
#if(defined A && defined C)
const string foo = "xz";
#else
#ifdef A
const string foo = "x";
#endif
#endif
#endif
#endif
Tính đến VS2015 không có công trình nào ở trên hoạt động. Chỉ thị đúng là:
#if (MAX && !MIN)
xem thêm tại đây