Rene T. schrieb:
> laut lcc
lcc ist kein Kriterium für Korrektheit.
Es wurde natürlich schon viel darüber geschrieben, dass in einem
konformen Programm main() immer „int“ zurückgibt. So sollte man es
sich auch einfach grundsätzlich angewöhnen.
Der Vollständigkeit halber sei erwähnt, dass diese Forderung sich nur
auf Programme bezieht, die in einem hosted environment laufen. Für
solche, die in einem freestanding environment laufen, erlegt der
Standard keine weiteren Verpflichtungen für main(); selbst die Tatsache,
ob das Programm überhaupt mit main() beginnen muss, ist dort nicht
mehr festgelegt. (Das ist zumindest für die Sprache C der Fall;
inwiefern C++ auch die Unterscheidung zwischen hosted und freestanding
kennt, ist mir gerade nicht bekannt.)
Da wir im GCC-Forum sind: die Unterscheidung zwischen hosted und
freestanding erfolgt dort über -fhosted oder -ffreestanding.
Um jetzt die „Hurra!, hab' ich's doch schon immer gewusst“-Rufer etwas
zu dämpfen: selbst in einer Microcontroller-Umgebung fährt man in der
Regel jedoch gut damit, sie als hosted anzusehen, zumindest, solange
man sich auch auf eine (wenigstens in Teilen) standardkonforme
Bibliothek stützen möchte. Damit erlaubt man dem Compiler nämlich,
dass er selbst Annahmen bezüglich der vom Standard definierten
Bibliotheksfunktionen machen kann, sodass er beispielsweise
„strlen("foo")“ durch die Konstante ‚3‘ ersetzen kann. In einem
freestanding environment darf er keinerlei Annahmen mehr über die
Wirkungsweise der Funktion strlen() treffen, sondern wird gezwungen,
sie zur Laufzeit aufzurufen. (Derartige Beispiele gibt es zahllose.)