Tôi đã đọc những câu dưới đây và câu trả lời có vẻ rõ ràng đủ: How to concatenate twice with the C preprocessor and expand a macro as in "arg ## _ ## MACRO"?Làm thế nào để nối chuỗi với bộ tiền xử lý C với dấu chấm trong chúng?
Nhưng nếu BIẾN có một dấu chấm ở cuối?
Tôi đang cố gắng thực hiện một macro đơn giản làm tăng bộ đếm trong cấu trúc cho mục đích gỡ lỗi. Tôi có thể dễ dàng làm được điều này ngay cả khi không sự giúp đỡ từ các câu hỏi ở trên chỉ đơn giản với
#ifdef DEBUG
#define DEBUG_INC_COUNTER(x) x++
#endif
và gọi nó là
DEBUG_INC_COUNT(debugObj.var1);
Nhưng thêm "debugObj." cho mọi macro có vẻ dư thừa. Tuy nhiên nếu tôi cố gắng nối:
#define VARIABLE debugObj.
#define PASTER(x,y) x ## y++
#define EVALUATOR(x,y) PASTER(x,y)
#define DEBUG_INC_COUNTER(x) EVALUATOR(VARIABLE, x)
DEBUG_INC_COUNTER(var)
gcc -E macro.c
tôi nhận được
macro.c:6:1: error: pasting "." and "var" does not give a valid preprocessing token
Vậy làm thế nào tôi nên thay đổi này để
DEBUG_INC_COUNTER(var);
tạo
debugObj.var++;
?
D'oh! Tôi đã quá thông minh ở đó. – Makis