Deklaration nur am Anfang von Funktionen möglich?
-
Hallo,
nach längerer Zeit in C++ muss ich jetzt mal wieder was in C machen.
Mit etwas Verwunderung stellte ich fest, dass Deklarationen nur ganz am Anfang von Funktionen vom Compiler akzeptiert werden.
Kann mir jemand sagen, ob dies im ANSI-C-Standard so gewollt ist, oder ob das nur eine Macke im Visual Studio (.c) ist?
Danke und Gruß
Ravel
-
Das ist traditionell in C so und wurde erst 1999 mit dem neuen Standard (C99) geändert. Wenn dein Compiler nicht ganz aktuell ist, wird er das also u.U. nicht unterstützen.
-
Ist so gewollt.
[EDIT]Ich bin einfach zu langsam, @Bashar gibt es eigentlich schon vernünftige C99 Compiler bzw. sogar IDE´s?[/EDIT]
MfG Max
-
Danke!
-
Master_Max schrieb:
gibt es eigentlich schon vernünftige C99 Compiler bzw. sogar IDE´s?
Was hat eine IDE damit zu tun? Also in meinem Notepad kann ich C99 Code ohne Probleme schreiben.
Viele moderne Compiler koennen schon C99 - schau halt mal auf die 'Feature Liste' bzw. das Release Datum des Compilers.
-
Master_Max: gcc hat einen C99-Modus.
-
Guten Abend.
Master_Max schrieb:
gibt es eigentlich schon vernünftige C99 Compiler bzw. sogar IDE´s?
Shade Of Mine schrieb:
Was hat eine IDE damit zu tun? Also in meinem Notepad kann ich C99 Code ohne Probleme schreiben.
Nichts hat eine ide damit direkt zu tuen, man kann natürlich in notepad oder Word... eine Datei erstellen und als .cpp .asm .wasweis ich speichern und dann über die kommandozeile kompilieren.
-Es ist halt komfortabler wenn man ne ide hat.Mich hatte das ja nur interresiert weil in C++ Ge-Packt drinnnen steht das es noch fast keine C99 Compiler gibt.
MfG max
-
Master_Max schrieb:
Mich hatte das ja nur interresiert weil in C++ Ge-Packt drinnnen steht das es noch fast keine C99 Compiler gibt.
Das Buch ist ja auch schon wieder fast 3 Jahre alt
-
Mit etwas Verwunderung stellte ich fest, dass Deklarationen nur ganz am Anfang von Funktionen vom Compiler akzeptiert werden.
Das ist traditionell in C so
Ich weiß natürlich, dass Bashar es genauer weiß und das er die Genauigkeit zugunsten der Verständlichkeit reduziert hat, aber ich muss jetzt doch nochmal darauf hinweisen, dass dies ein klassischer Irrglaube ist (zumindest an der Universität Potsdam).
Deklarationen können in C89 nicht nur zu Beginn eine Funktion stehen sondern immer zu Beginn eines jeden Blocks:void func(void) { int i; for (i = 0; i < 10; ++i) { int j; /* ... */ } { int k; /* ... */ } }
Das ist z.B. völlig legales C89.