我有以下宏:
#define my_add_property(ret, name, value) \
object tmp; \
tmp = *value; \
add_property(ret, name, &tmp);
现在我在follow函数中使用宏:
void func() {
object *ret;
my_add_property(ret, "key", my_func1());
my_add_property(ret, "value", my_func2());
}
它将make error
:tmp
被重新定义。
所以我想使用object tmp##name
,但如果名称为"key"
,则tmp##name
将为tmp"key"
。我应该如何编写使tmp##name
成为tmpkey
而非tmp"key"
的宏?谢谢!
答案 0 :(得分:4)
您可以在宏中创建一个新范围,这样tmp
只能通过将实现包装在do {} while(0)
中而在短时间内生效,例如:
#define my_add_property(return, name, value) do { \
object tmp; \
tmp = *value; \
add_property(return, name, &tmp); } while(0)