Ich habe das Makro folgen:Wie Makro schreiben, um zu vermeiden, neu zu definieren?
#define my_add_property(ret, name, value) \
object tmp; \
tmp = *value; \
add_property(ret, name, &tmp);
Jetzt benutze ich das Makro in der Follow-Funktion:
void func() {
object *ret;
my_add_property(ret, "key", my_func1());
my_add_property(ret, "value", my_func2());
}
Es hat make error
: tmp
neu definiert wird.
Deshalb möchte ich object tmp##name
verwenden, aber wenn der Name "key"
ist, wird tmp##name
tmp"key"
sein. Ich sollte tun, wie schreibe das Makro, das machen tmp##name
zu tmpkey
nicht tmp"key"
? Vielen Dank!
Ich liebe es, wie die Leute aus gehen ihrer Art, Code schwer zu lesen und zu pflegen. Mögen sie ein hartes Leben? –
Ist 'return' als Name eines Parameters eine gute Idee? –
Warum nicht einfach 'add_property (ret," key ", my_func1())' '? Ein Zeiger auf "tmp" wird bedeutungslos, sobald 'func()' beendet ist. Was ist der Sinn von 'my_add_property()' an erster Stelle? Vielleicht, was Sie wirklich wollen, ist: 'object * tmp = malloc (sizeof (object)); * tmp = * Wert; add_property (ret, name, tmp) '? – user172818