Tiếng Anh của tôi kém và tôi xin lỗi vì lỗi ngôn ngữ và lỗi chính tả nếu có.
Nếu #ifdef không được bao bọc lệnh gọi macro, có một giải pháp không quá duyên dáng.
g ++ chỉ: Bạn có thể thử điều này trong những dịp chọn lọc. Nhưng nếu có dấu phẩy trong a hoặc b, cách giải quyết vẫn cần thiết. Nó đơn giản dựa trên thực tế là __cplusplus được định nghĩa là "1" khi ở trong môi trường C++ và vẫn giữ nguyên trong khi không.
#define SELECT1(a, b) a
#define SELECT__cplusplus(a, b) b
#define xcat(a,b) a##b
#define concat(...) xcat(__VA_ARGS__)
#define C_OR_CPP(C, CPP) concat(SELECT, __cplusplus)(C, CPP)
C_OR_CPP(1, 2)
môi trường khác Kiểm tra vĩ mô __cplusplus, một trình biên dịch rằng comforming tiêu chuẩn C++ nên tạo
#define __cplusplus value
và giá trị nên> = 199711L
Yo Dawg, tôi nghe bạn thích macro ? – Gui13
@ Gui13 Xin lỗi, nhưng hai bạn muốn gì? Làm cách nào khác để bạn sử dụng tiêu đề trong C++ và C? – imacake
@imacake: xin lỗi, tôi vừa tạo một tham chiếu không đáng kể tới [meme internet] (http://knowyourmeme.com/memes/xzibit-yo-dawg). Không có vi phạm để được thực hiện :-) – Gui13