我有如下宏:如何編寫宏以避免重新定義?
#define my_add_property(ret, name, value) \
object tmp; \
tmp = *value; \
add_property(ret, name, &tmp);
現在我用宏在後續功能:
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"
的宏?謝謝!
我喜歡它的人如何走出去他們的方式使代碼難以閱讀和維護。他們喜歡艱苦的生活嗎? –
是否將'return'作爲參數的名稱是一個好主意? –
爲什麼不使用'add_property(ret,「key」,my_func1())'?一旦'func()'完成,指向'tmp'的指針變得毫無意義。讓my_add_property()放在第一位有什麼意義?也許你真正想要的是:'object * tmp = malloc(sizeof(object)); * TMP = *值; add_property(RET,名稱,TMP)'? – user172818