Variablendeklarationen folgen auf if-Anweisungen

In einem anderen Forum ist ein Problem aufgetreten, und ich wusste, wie man es behebt, aber es enthüllte eine Besonderheit des Compilers, die mir eigen war. Die Person hat den Fehler "Eingebettete Anweisung kann keine Deklaration oder beschriftete Anweisung sein" erhalten, weil sie eine Deklaration einer Variablen nach einer if-Anweisung ohne eckige Klammern hatte. Das war nicht ihre Absicht, aber sie hatten die Codezeile unmittelbar nach der if-Anweisung auskommentiert, wodurch die Variablendeklaration zur de facto auszuführenden Codezeile wurde. Jedenfalls ist das der Hintergrund, der mich dazu bringt.

Der folgende Code ist illegal

if (true)
    int i = 7;

Wenn Sie dies jedoch in Klammern setzen, ist alles legal.

if (true)
{
    int i = 7;
}

Keiner der Codes ist nützlich. Doch der zweite ist in Ordnung. Was genau ist die Erklärung für dieses Verhalten?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage