bekam ich eine Codezeile, wo dies ziemlich nützlich ist:Ist es schlecht oder falsch, auf Va_arg-Makro als Referenz zuzugreifen?
void *test;
/*...*/
test = &va_arg(arg_list, int);
ich dies nur versucht wurde, wie ich dachte, das ist ein Makro und nicht eine Funktion ist, so dass es funktionieren könnte. Ich hatte nicht wirklich erwartet, dass es funktioniert, aber es macht genau das, was ich will.
Aber jetzt bin ich nicht sicher über die Lebensdauer der Adresse und andere Risiken, die von diesem Stil auftreten können.
Könnte mir jemand sagen, warum die Verwendung der Referenz der va_arg
Wert auf diese Weise ist sicher/unsicher?
Ich sehe nichts in der Spezifikation, die 'va_arg (ap, type)' benötigt, um ein lvalue zu sein. –
@JamesMcNellis Also könnte dies in einigen Umgebungen ungültig sein? – dhein
@ Bedeutung-Angelegenheiten Ich denke, er sagt das Gegenteil. Da der Standard sagt, dass 'va_arg' nur einen Wert zurückgibt, gibt es kein Versprechen, dass Sie die Adresse davon nehmen könnten. Es wäre also unsicher, dies zu tun. – user694733