私はこのコードを少し持っています (実際には、ガベージコレクションされた Forth システムのインタープリターの一部です):
#define PRIMITIVE(name) \
do \
{ \
VocabEntry* entry = (VocabEntry*)gc_alloc(sizeof(VocabEntry)); \
entry->code = name; \
entry->name = cstr_to_pstr(#name); \
entry->prev = latest_vocab_entry; \
latest_vocab_entry = entry; \
} \
while (false)
PRIMITIVE(dup);
PRIMITIVE(drop);
PRIMITIVE(swap);
// and a lot more
しかし、問題があります: 行に
entry->name = cstr_to_pstr(#name);
フィールドは、、、、およびその他にname
置き換えられます。フィールド名を代入しないでほしい。dup
drop
swap
それで、単にマクロ引数の名前を変更する以外に、これを解決する方法はありますか?
回答として、一般に、マクロ本体でマクロ引数名の置換を抑制する方法があるかどうかを説明してください。「このようにしてください」と答えないでください(お願いします)。