Ich habe mir gerade DAS C GRUNDLAGENBUCH von gerhard Willems gekauft, da ich das C++ Buch von ihm super gut erklärt fand und es auch entsprechend bei amazon bewertet wurde.. Nun begint bei C++ das Beispiel mit void main(); wohingen es bei C mit main(); beginnt.. Tatsächlich akzeptiert der C Compiler von Mkroe beides, weißt aber darauf gi das für mein kein rückgabewert definiert ist... Hat sich hier im laufe der Entwicklungszeit von c einfach was geändert?! Aucg seite 545 wird dann das erste mal von void gesprochen Auch beinhalten nun die beispielprogramme diese beispiele..dennoch wird bei main () imme r das void weggelassen...
Rene T. schrieb: > void main(); Doppelt falsch, wobei ich allerdings annehme, dass das Semikolon von dir kommt. Rene T. schrieb: > main(); Und auch falsch. "main()" darf es in einem Projekt nur einmal geben und das ist mit Rückgabetyp int. Alles andere ist falsch, sowohl in C, als auch in C++. Dass manche 1/(a+b) zu 1/a+1/b auflösen macht es auch nicht richtiger.
es ist natürlich main() gemeint.......... und wenn void main() besser ist... ist void main(void) dann noch richtiger?!?
Rene T. schrieb: > und wenn > void main() > besser ist... Ist es nicht. Das ist falsch. "int main(void)" geht aber, glaube ich. Das finde ich aber nicht schön mit dem void. Warum soll man in etwas, das leer sein soll, etwas hineinschreiben, um zu zeigen, dass es leer ist, anstatt es einfach leer zu lassen, wenn dadurch absolut keine Doppeldeutigkeit entsteht?
"Warum soll man in etwas, das leer sein soll, etwas hineinschreiben, " !?!? void main() ist in vier Büchern die ich hier habe die gängige Einleitung! Man sollte es reinschreiben damit es klar ist und nicht vom Kompiler einfach mit einem INT angenommen wird....so die Erklärungen die ich dazu finde void für nichts und wenn das da schon immer geschrieben wird.warum dann nicht in den Klammern?!? main() geht auch, aber scheint nicht ganz korrekt zu sein, da der Compiler dann eben nur davon ausgeht das es sich um INT handelt... puhhh..ich weiß schon warum ich seit Jahren mit Pasal schreibe...da stoße ich nicht gleich am Anfang auf Wiedersprüche und unterschiedliche Meinungen..bei Psal ist es wie es ist, und das ist dann richtig oder falsch.... Naja..etwas versuche ich es noch in c aber das ganze scheint mir wirklich sehr fehleranfällig :-(
Laut C-Standard (seit C89) ist
1 | int main() |
2 | int main(void) |
3 | int main(int,char**) // meist als int main(int argc, char** argv) |
erlaubt. Im ersten K&R stand noch was anderes, aber das ist ja nur etwas über 25 Jahre her. Eine leere Paramterliste bedeutet in C, dass beliebige Paramter übergeben werden könne. Das void jedoch zeigt an, das es keine Parameter gibt. @Rene T. Im Gegensatz zu Pascal halten sich aber alle modernen C-Compiler an den Standard (auch wenn er bei manchen doch veraltet ist).
Rene T. schrieb: > void main(); Hoffentlich nicht. > main(); Hoffentlich nicht. Dieser K&R Stil ist seit 1989 obsolet. Bei Mikrocontrollern ohne Betriebssystem ergibt ein Return-Wert nicht viel Sinn. Unter Betriebssystemen hingegen ist er Pflicht.
Korrekt ist:
1 | int main(int argc, char **argv) |
2 | {
|
3 | ....
|
4 | |
5 | return(0); |
6 | }
|
Wobei sich das auf einem Mikrocontroller relativiert. Grüsse, René PS: ich muss mich korrigieren, korrekt ist falsch, vollständig sollte es heissen.
hm..ok..also laut lcc scheint #include <stdio.h> #include <stdlib.h> void main(void) { system("cls"); printf ("Dies ist Dein erstes Programm :-)\n"); getchar(); } absolut korrekt zu sein WENN kein Wert übergeben werden soll oder eben wie bereits genannt #include <stdio.h> #include <stdlib.h> int main(void) { system("cls"); printf ("Dies ist Dein erstes Programm :-)\n"); getchar(); return 0; }
Zulässig in C99/C11: int main(void) { /* ... */ } int main(int argc, char *argv[]) { /* ... */ } "... or in some other implementation-defined manner."
Rene T. schrieb: > void main(void) Schmeiss die Bücher die dir soetwas verkaufen wollen einfach weg, da wird mich Sicherheit noch mehr Unsinnn drin stehen. Gib nicht C die Schuld, sondern such sie bei deinen schlechten Büchern.
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.)
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.