unverständlicher Bug
-
Hallo,
#include <stdlib.h> #include <stdio.h> int main() { srand(time(0)); int zufall = rand()%101; printf("%d", zufall); return 0; }
mit diesem einfachem Programm möchte ich eine Zufallszahl zwischen 0 und 100 erzeugen, bekomme aber immer folgende Meldung:
parse error before int
zufall undeclared (first use in this function)und ich weiss nicht, was damit gemeint ist.
Danke für Hilfe!
-
#include <stdlib.h> #include <stdio.h> int main() { int zufall; srand(time(0)); zufall = rand()%101; printf("%d", zufall); return 0; }
-
Deklarierungen von Variablen müssen immer am Anfang der Funktion sein.
In C++ kann sie irgendwo in der Funktion sein. Nicht bei ANSI.C
-
Original erstellt von Unix-Tom:
Deklarierungen von Variablen müssen immer am Anfang der Funktion sein.
In C++ kann sie irgendwo in der Funktion sein. Nicht bei ANSI.CIn C99 ist das aber IMO schon erlaubt, oder?
-
Der gcc machts interessanterweise sogar mit C89/ANSI C schon.
$ cat > foo.c #include <stdio.h> int main(int argc, char** argv) { printf("foo"); int foo = 0; printf("bar %i", foo); return 0; } $ gcc foo.c $ gcc -std=c89 foo.c $ gcc -ansi foo.c $
Wer ist schuld, GCC oder ANSI
-
weiß ich nicht.
-
Der Compiler weiß natülich das es den neuen Standard gibt. Dieser ist nämlich so gebaut das er bis zu einem bestimmten Datum den alten Standard verwendet und danach den neuen.
Also mein VC++ 1 macht das.
[ Dieser Beitrag wurde am 02.06.2003 um 06:50 Uhr von Unix-Tom editiert. ]
-
Hast du nicht noch einen Header vergessen?
#include <stdlib.h> /* rand(), srand() */ #include <stdio.h> /* printf() */ #include <time.h> /* time() */ int main() { int zufall; srand( time(0) ); zufall = rand() % 101; printf("%d", zufall); return 0; }
-
Der gcc machts interessanterweise sogar mit C89/ANSI C schon
Der gcc 2.95 hat es noch nicht erlaubt,
beim gcc 3.2 dürfen Variablen an beliebiger Stelle deklariert sein.
-
Original erstellt von Unix-Tom:
**Der Compiler weiß natülich das es den neuen Standard gibt. Dieser ist nämlich so gebaut das er bis zu einem bestimmten Datum den alten Standard verwendet und danach den neuen.
**Ja Moment, aber was ist ewenn ich dem Compiler explizit sage, welchen Standard er benutzen soll, dann wählt der dohc nicht selbst einen aus.
-
% gcc-3.2.2 -std=c89 -pedantic decl.c decl.c: In function `main': decl.c:4: warning: ISO C89 forbids mixed declarations and code
-
Ah, danke, das Flag fehlte, -strict hatte ich noch probiert
-
Wer`s nichgt gemerkt hat. Das war nicht ernst gemeint von mir.
Woher sollten alte Compiler auch einen neuen Standard kennen.