In GNUC C können Sie typeof(expression)
verwenden, und es ist legal, einen Ausdruck mit darin enthaltenen Nebenwirkungen zu verwenden. So können Sie zum Beispiel diesen C-Code haben:
In diesem Fall wird der Nebeneffekt ignoriert und x ist danach immer noch Null (das ist sinnvoll, da Typen nur eine Kompilierzeit sind).
Die GCC-Dokumentation lautet jedoch:
Der Operand von typeof wird auf seine Nebenwirkungen überprüft genau dann, wenn es sich um einen Ausdruck eines variabel modifizierten Typs handelt oder der Name eines solchen Typs.
Was bedeutet dieser Satz? Ist es wirklich möglich, typeof
mit einem Nebeneffekt zu schreiben und den Nebeneffekt tatsächlich zur Laufzeit auszuführen? Für mich scheint dieser Satz darauf hinzuweisen.
Ja, in bestimmten Fällen können Nebenwirkungen innerhalb von typeof
festgestellt werden. Wie die Dokumentation sagt, muss es sich um einen "variabel modifizierten Typ" handeln. Dies ist ein Typ, der von einem bestimmten Laufzeitwert abhängt, z. B. int[x]
.
Der folgende Code ist also zulässig, deklariert y vom Typ int[1]
und x hat danach den Wert 1:
Natürlich ist dies auch bei variabel modifizierten Typen generell nur für lokale Variablendeklarationen (Inside-Funktion) zulässig.