Definition im if/while statement
-
Wo steht eigentlich im Standard, dass man das hier darf,
if (int i = 0); while (int i = 0);
aber nicht das hier:
if ((int i = 0)); while ((int i = 0));
? (Würde mich auch für C++ interessieren.)
Falls es keine passende Stelle gibt: Aus welchen Regeln ergibt sich das denn?
-
Falscher Code ist falsch.
-
Im C++ Standard (n3242) sind die Regeln ab 6.4/1 "Selection statements" beschrieben. Dass das funktioniert ergibt sich aus Sonderregeln, nicht aus sonstigen grammatikalischen Eigenschaften.
z.B.
n3242 6.4/1 Selection statements schrieb:
selection-statement: if ( condition ) statement if ( condition ) statement else statement switch ( condition ) statement condition: expression attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause // <- attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list // <-
In C geht das glaube ich gar nicht, zumindest nicht in C89.
-
cooky451 schrieb:
In C geht das glaube ich gar nicht, zumindest nicht in C89.
Wir haben aber 2012 und schon zwei Überarbeitungen des Standards, die das beide erlauben.
-
cooky451 schrieb:
Im C++ Standard (n3242) sind die Regeln ab 6.4/1 "Selection statements" beschrieben. Dass das funktioniert ergibt sich aus Sonderregeln, nicht aus sonstigen grammatikalischen Eigenschaften.
z.B.
n3242 6.4/1 Selection statements schrieb:
selection-statement: if ( condition ) statement if ( condition ) statement else statement switch ( condition ) statement condition: expression attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause // <- attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list // <-
In C geht das glaube ich gar nicht, zumindest nicht in C89.
Nun expression ist der Oberbegriff/Wurzel in den man bis zu Klammerung und Assignment abspringen könnte.
-
SeppJ schrieb:
Wir haben aber 2012 und schon zwei Überarbeitungen des Standards, die das beide erlauben.
Bei denen war ich mir nicht ganz sicher. Allerdings: http://ideone.com/4zgv8
Ein C11 Compiler steht mir leider nicht zur Verfügung.Zeus schrieb:
Nun expression ist der Oberbegriff/Wurzel in den man bis zu Klammerung und Assignment abspringen könnte.
Äh.. ne. Also ne, wenn ich dich richtig verstanden habe.
-
cooky451 schrieb:
Zeus schrieb:
Nun expression ist der Oberbegriff/Wurzel in den man bis zu Klammerung und Assignment abspringen könnte.
Äh.. ne. Also ne, wenn ich dich richtig verstanden habe.
Stimmt das ist eine Deklaration
-
SeppJ schrieb:
cooky451 schrieb:
In C geht das glaube ich gar nicht, zumindest nicht in C89.
Wir haben aber 2012 und schon zwei Überarbeitungen des Standards, die das beide erlauben.
Welche denn? C99 jedenfalls nicht.
-
Bashar schrieb:
SeppJ schrieb:
cooky451 schrieb:
In C geht das glaube ich gar nicht, zumindest nicht in C89.
Wir haben aber 2012 und schon zwei Überarbeitungen des Standards, die das beide erlauben.
Welche denn? C99 jedenfalls nicht.
Irgendwie scheine ich bei meiner Antwort das Thema des Threads verfehlt zu haben.