Zitat von
Muetze1:
Erste Schleife lief von 0 bis 9, zweite von 1 bis 9.
Hm, der GCC läuft bei beiden von 0 bis 9, sowohl im C99-, als auch im C89-Modus.
Ein anderes Verhalten als ein Durchlaufen von 0 bis 9 würde ich ehrlich gesagt nicht erwarten. Laut C99-Rationale war für C89 die Bearbeitung des letzten for-Arguments immer der letzte Schritt in einem Schleifendurchlauf. Eine for-Schleife wurde in eine while-Schleife umgeschrieben, die so aussah:
Code:
for (arg1; arg2; arg3)
list;
---------
arg1;
while (arg2)
{
list;
arg3;
}
Es würde also jeweils eine seperate Anweisung "++i" oder eine separate Anweisung "i++" in der letzten Zeile der while-Schleife stehen.
Offensichtlich scheinen die von dir angesprochenen Compiler je nachdem, op pre- oder post-increment verwendet wird, mal 'ne while- und mal 'ne do-Schleife draus zu basteln.
IMHO eigenartiges Verhalten.
Da du mit der Deklaration der Variable i innterhalb des Schleifenkopfes schon C99 implizierst, habe ich mal ein wenig im Standard gelesen:
Zitat von
ISO WG14:
The statement
Code:
for ( clause-1 ; expression-2 ; expression-3 ) statement
behaves as follows: The expression expression-2 is the controlling expression that is
evaluated before each execution of the loop body. The expression expression-3 is
evaluated as a void expression after each execution of the loop body.
Es ist jetzt also zwar nicht mehr als Umschreibung einer while-Schleife definiert, aber inhaltlich ist es so wie vorher auch, expression-3 ist das letzte, was ausgeführt wird.
Ich würde sagen, die von dir angesprochenen Compiler sind leicht defective oder implementieren irgendein anderes oder gar kein Standard-C.