S
Joah, ist wohl schon etwas älter, das Buch. Ich bin jetzt auch nicht gerade in der void main() -Thematik drinnen, aber eigentlich wird der return -Wert verwendet, um dem OS mitzuteilen, ob das Programm korrekt beendet wurde oder Fehler aufgetreten sind. Bei void hat das OS dann allerdings keine Chance, so etwas herauszufinden...
Vom Standard wird IMHO int main() erwartet, aber die meisten Compiler unterstützen diese Schreibweise immernoch, da das void main() relativ weit verbreitet ist. Meistens gibt's dann lediglich ein Warning.
Dass dort nichts über Initialisierung von Variablen steht, ist teils verständlich, teils aber auch nicht. Wenn sie angelegt werden, sind sie immer (es sei denn, sie sind global - aber darauf verlasse ich mich persönlich nicht) uninitialisiert. D.h. in ihnen steht der Wert, der vorher an der jetzt reservierten Stelle im Speicher stand - und der ist rein zufällig. Allerdings kann man Variablen beim Erzeugen auch gleich initialisieren, was viel sicherer ist, da dann keine seltsamen, unverständlichen Ergebnisse rauskommen und man den Fehler an falscher Stelle sucht. Hier ein Beispiel:
int a; /* Uninitialisiert! */
int b, c; /* Beide uninitialisiert! */
int d = 0; /* Mit 0 initialisiert */
int e = 42, f = 23; /* Beide initialisiert */
Hier nochmal der direkte Vergleich für deine Berechnungen:
/* Uninitialisiert */
int a, b, c;
c = a + b;
/* -> c = zufaellig, da a und b zufaellig. Folgerung:
* Berechnungsfehler */
/* Initialisiert */
int d = 0, e = 0, f = 0;
f = d + e;
/* -> f = 0, da d und e 0. Folgerung:
* Berechnung mit falschen Werten, d und e muessen offensichtlich
* falsch sein */
Ich glaube, wenn man die Variablen initialisiert, ist es ganz leicht, den Fehler zu finden, wie die möglichen Folgerungen hier demonstrieren. Bei 1 + 2 = -740172 vermutet man in erster Linie einen Überlauf und sucht evtl. an völlig falscher Stelle, bei 1 + 2 = 0 ist allerdings relativ schnell klar, dass da was mit der 1 und 2 nicht stimmen kann...oder es ist zumindest einfacher, darauf zu schließen.