我有这段代码(实际上是垃圾收集 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
和其余部分。我希望字段名称不被替换。
那么,除了简单地重命名宏参数之外,还有什么方法可以解决这个问题?
对于答案,请解释是否有一种方法可以抑制宏体中宏参数名称的替换。不要回答“就这样做”(请)。