Hallo Leute, hat schon mal jemand von Euch mit dem Keil-Compiler gearbeitet ? Wenn ja, dann könnt Ihr ja mal versuchen mir zu helfen. bei mir lässt sich das nachfolgende Simpel-Programm nicht kompilieren ! int main(void) { unsigned int aVariable; aVariable = 3; unsigned int anotherVariable; anotherVariable = 10; return 1; } Was dem Compiler nicht zu gefallen scheint, ist dass die Variable anotherVariable angelegt wird, nachdem man die Variable aVariable verändert hat, bzw. damit gearbeitet hat. Ist das immer so ? Oder liegt das an den Einstellungen des Compilers ? Ich habe auch schon bei Keil nachgeschaut - bin aber genauso schlauf wie vorher. Danke für Eure Hilfe, Daniel
Hallo Khani, mach mal folgendes: int main(void) { unsigned int aVariable; unsigned int anotherVariable; aVariable = 3; anotherVariable = 10; return 1; } Grüße Mark,
hallo entweder so: int main(void) { unsigned int aVariable; unsigned int anotherVariable; aVariable = 3; anotherVariable = 10; return 1; } oder so: int main(void) { unsigned int aVariable = 3; unsigned int anotherVariable = 10; return 1; } Ja, es ist immer so Gruß, oleg
also dein problem ist eigentlich ganz easy wenn du dinge initialisierst muss das vor der vergabe von avariable sein also es müsste so gehen: unsigned int aVariable; unsigned int anotherVariable; aVariable = 3; anotherVariable = 10;
Danke Leute, wie ich das umgehen kann, das hatte ich mir schon ausgerechnet - aber so gefällt mir das irgendwie nicht. Das ist ja wie bei PASCAL - alle Variablen am Anfang instanzieren und dann loslegen. Dann brüsten die von Keil sich auf Ihrer Homepage noch damit, das der Compiler - ANSI-C konform wäre. Also ich habe schon mit anderen ANSI-C-Compilern gearbeitet, da ging das ! Naja, was soll's. ;-)) Danke auf jeden Fall, Khani
Hallo Khani, dein Ansinnen halte ich für sinnvoll. Deshalb ist es ja auch in C++ eingeführt worden. Es wird halt nicht vom C Standard gedeckt. Evtl. vom neuesten oder auch von irgendeiner älteren Variante. Auf jeden Fall ist es kein Fehler oder Problem von Keil. Wenn es bei anderen Compilern läuft, so ist das eine Auslegungssache des Herstellers. Wenn du wirklich kompatiblen Code schreiben willst, musst du dich auf den kleinsten gemeinsamen Nenner einstellen. MfG Oryx
In ANSI-C kann man Variablen nur am Beginn eines Blocks anlegen, bevor irgendeine Operation kommt. Mach also einfach einen neuen Block auf: int main(void) { unsigned int aVariable; aVariable = 3; { unsigned int anotherVariable; anotherVariable = 10; } return 1; } Das ein Compiler ANSI-C versteht, heißt aber nicht, das er NUR ANSI-C versteht. D.h. er kann durchaus eigene Konstrukte haben, was dann aber zur Folge hat, daß solche Sourcen dann nicht mehr von nur ANSI-C Compilern verstanden werden. Dein obiges Programm ist definitiv kein ANSI-C. Peter
Hi @peter Das erste Programm ist sehr wohl ANSI-C. Allerdings nicht ANSI-C 89 sondern ANSI-C 99. Das läßt Variablendeklaration auch mitten in der Funktion zu und nicht nur am Funktionskopf. Den GCC kann man per -std=c99 in den C99 Modus versetzen. Matthias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.