次の質問を読みましたが、答えは十分に明確に見えます 。Cプリプロセッサと2回連結し、「arg ## _ ## MACRO」のようにマクロを展開する方法は?
しかし、VARIABLEの最後にドットがある場合はどうなりますか?
デバッグの目的で構造体のカウンターをインクリメントする単純なマクロを実行しようとしています。上記の質問の助けがなくても、簡単にこれを行うことができます
#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
私は得る
macro.c:6:1: error: pasting "." and "var" does not give a valid preprocessing token
では、これをどのように変更すればよいのでしょうか。
DEBUG_INC_COUNTER(var);
生成します
debugObj.var++;
?