Kann ich drucken, wie ein Ausdruck ausgewertet wird?Gibt die Art eines Ausdrucks in C zurück, d. H., Ob es ein rvalue oder ein lval ist
Zum Beispiel, wenn ich wollte herausfinden, ob ein Wert als R-Wert ausgewertet wurde oder Lvalue ich den hypothetischen Code nennen würde:
int main() {
if(isrvalue(*(int *)4)) return 0;
else return 1;
}
Dies schafft Probleme wie wir "sind zu entdecken unten, dass die Typ 'eines Ausdrucks kann davon abhängen, ob er sich auf der rechten oder linken Seite des Zuweisungsoperators befindet. So würde der Test besser geeignet sein als
supports_lvalue(*(int *)4)
Obwohl auch diese nur hypothetisch und kann nur verlassen werden, um das Spiel mit grundlegenden Beispielen.
Der Grund ist nur für Experimente, aber es könnte nützlich sein, im Debugging, wenn es möglich ist.
Diese Frage ist meiner Meinung nach ziemlich unklar (ich konnte wirklich nicht verstehen, was Sie fragen). War im Begriff, downvote, aber wie Sie fragen, warum Sie downvotes bekommen, möchte ich erklären. –
Ich glaube nicht, dass es eine Möglichkeit gibt, es in C zu tun. Sie müssten einen Compiler verwenden, mit dem Sie auf den AST einer bestimmten Kompilierungseinheit zugreifen können. Dennoch wäre es wahrscheinlich weniger nützlich, diese Informationen zu Debugging-Zwecken * zu kennen, als Sie vielleicht denken. Ein Programm, das einen R-Wert anstelle eines L-Wertes verwendet, wird trotzdem nicht kompiliert. –
Was meinen Sie mit "ein Wert wurde als Rvalue oder Lvalue ausgewertet". Vielleicht fragen Sie, ob eine Lvalue-to-rvalue-Konvertierung angewendet wird, aber das hängt nur vom Kontext ab. Oder wollten Sie fragen, ob ein Ausdruck ein Wert ist oder nicht? –