Diese Zeile kompiliert, wenn ich C++ verwenden, aber nicht C:Compiliert wie C++, aber nicht C (Fehler: L-Wert erforderlich als einstelliger '&' Operand)
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL))); //make an lvalue with alloca
Ich bin durch diesen Unterschied überrascht. Es gibt nicht einmal eine Warnung für C++.
Wenn ich gcc -x c
angeben, die Nachricht ist:
playground.cpp:25:8: error: lvalue required as unary '&' operand
gmtime(&(*(time_t *)alloca(sizeof(time_t)) = time(NULL)));
^
Ist das nicht die &
hier nur ein Adressoperator? Warum unterscheidet es sich in C und C++?
Obwohl ich zusammengesetzte Literale in C verwenden kann, ist es immer noch möglich, meine Syntax so zu ändern, dass sie sowohl in C & C++ funktioniert?
Auch der Unterschied nicht etwa ist '&', so scheint es zu sein, ob '(* (time_t *) alloca (sizeof (time_t)) = Zeit (NULL)) 'ist ein Wert oder nicht. – immibis
Warum schreibe ich das nicht einfach auf zwei Zeilen? 'time_t t = Zeit (NULL); gmtime (&t); ' – immibis
@immibis hauptsächlich, weil ich eine Adresse eines temporären Objekts bekommen will (der' time_t' Wert wird nur einmal benutzt). Ich fand zusammengesetzte Literale in C so bequem, aber ich kann es nicht in C++ verwenden. – cshu