Ben şu soruyu okudum ve cevap yeterince açık görünüyor: DEĞİŞKEN sonuna nokta vardır How to concatenate twice with the C preprocessor and expand a macro as in "arg ## _ ## MACRO"?Dizeleri C önişlemcisiyle noktalarla birleştirmek nasıl?
Ama ne olur?
Sayaçları hata ayıklama amacıyla yapılandıran basit bir makro yapmaya çalışıyorum. Ben bile kolayca basitçe
#ifdef DEBUG
#define DEBUG_INC_COUNTER(x) x++
#endif
ile yukarıdaki soruya yardım almadan bunu yapmak ve bunu
DEBUG_INC_COUNT(debugObj.var1);
Ama ekleyerek çağırabilirsiniz "debugObj." her makro için çok fazla gereksiz görünüyor. Ancak bitiştirmek çalışırsanız:
#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
Ben
macro.c:6:1: error: pasting "." and "var" does not give a valid preprocessing token
Peki nasıl değiştirmeliyim olsun bu yüzden
DEBUG_INC_COUNTER(var);
debugObj.var++;
oluşturduğu?
D'oh! Orada çok zekiyim. – Makis