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.
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 :-(
intmain(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.
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;
}
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.)