Nebenwirkungen innerhalb eines typeof () - Ausdrucks

8

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:

%Vor%

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.

    
Philipp Wendler 16.07.2012, 12:47
quelle

1 Antwort

9

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:

%Vor%

Natürlich ist dies auch bei variabel modifizierten Typen generell nur für lokale Variablendeklarationen (Inside-Funktion) zulässig.

    
Philipp Wendler 16.07.2012, 12:47
quelle

Tags und Links