stm32 Keil uVision var declared but not referenzed schrieb im Beitrag
#1819132:
> (bei programmen für Linux hatte ich damit noch keine probleme)
Das liegt daran, daß du da vermutlich den gcc genommen hattest.
Der kennt zum einen etliche verschiedene C-Standards (je nach
Compileroptionen), und zum anderen sieht er selbst bei einem
eingestellten älteren Standard recht großzügig über viele
eigentlich nicht zulässige Dinge hinweg.
Beispiel: Mit der Option -std=c89 akzeptiert er sowohl
Quelltext nach ISO-C89, als auch etliche Erweiterungen.
Dein Beispiel, in dem erst ausführbare Anweisungen kommen und
dann nochmal Deklarationen/Definitionen, wäre nach C89 eigentlich
falsch, der gcc sagt aber nichts dazu und schluckt es.
Mit -std=c89 -pedantic akzeptiert er ebenfalls C89, meckert aber
alles an, was über C89 hinausgeht. Dein Programm wäre damit
also falsch.
Mit -std=c99 ist es in jedem Fall wieder richtig, egal ob mit
oder ohne -pedantic.
Wieder: http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/