私は、次の質問を読んで、答えは十分に明確なようだ: How to concatenate twice with the C preprocessor and expand a macro as in "arg ## _ ## MACRO"?Cプリプロセッサで文字列を連結するにはどのようにドットを入れますか?
しかし、どのような変数が最後にドットがある場合は?
私は、デバッグの目的で構造体のカウンタをインクリメントする単純なマクロを実行しようとしています。私は簡単に、単純に
#ifdef DEBUG
#define DEBUG_INC_COUNTER(x) x++
#endif
でも、上記の質問からの助けなしにこれを行うと
DEBUG_INC_COUNT(debugObj.var1);
しかし、追加、それを呼び出すことができます「debugObjを。」すべてのマクロに非常に冗長なようです。私は連結しようとする場合は:?
#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
を私は
DEBUG_INC_COUNTER(var);
が
debugObj.var++;
を生成するように、どのように私はこれを変更する必要があり
macro.c:6:1: error: pasting "." and "var" does not give a valid preprocessing token
を取得しますか
D'oh!私はあまりにも賢い。 – Makis