Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
10.12.2002, 16:05
programier_fan



Hallo Leute,
ich hab jetzt endlich einen C++-Compiler installiert,aber hab mir nun die Tuts bei DHCC angeschaut,und in jedem beispiel haben die "void main()",aber ich hab mit so nem Buch "C++ in 24Stunden"(von wegen,31 Tage!!!Voll des *piep* Buch)angefangen(bin schon ganz weit).Da haben die bei jedem Beispiel int main(),meiner Meinung nach ist das auch richtig,aber gibt es da einen Unterschied?oder ist das eine C++ und das andere C?
Bitte erklärt mir das mal.

PS:Lerne jetzt Mod-Coding,könnte aber noch ein paar N00bs im Coden gebrauchen,die mit mir zusammen lernen.Oder so...

:)

--

Hey du cheatest!Das hab ich durch die Mauer gesehen...

zum Seitenanfang zum Seitenende Profil || Suche
001
10.12.2002, 16:34
[RMen]OneStone



Also entweder ist dieses Buch scheisse oder du beknackt.

int main() -> Programm kann Wert zurückgeben, mindestens ein return x;
void main() -> Programm gibt keinen Wert zurück, kein return benötigt

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
002
10.12.2002, 17:11
apfelkorn



void main ist nicht mehr der aktuelle Standard.
Inzwischen wird erwartet, dass jedes Programm eine int main benutzt

--

zum Seitenanfang zum Seitenende Profil || Suche
003
10.12.2002, 17:11
Mazze



Soweit ich weiß, ist int main() standartisiert.

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
004
10.12.2002, 18:13
Diablo_bth



eigentlich is das doch so scheiß egal!
Eine Funktion vom Typ int speichert nämlich den Rückgabewert in eax [accumulation 32-Bit Register]. Wenn die main()-Funktion vom Typ void ist, dann hat eben eax irgendeinen beliebeigen Wert (hängt vom vorhergehenden Code ab). Meines Erachtens ist der Rückgabewert von main() sowiso wurscht - sofern man daraus keine Programmfehler etc. verdeutlichen will (jedenfalls unter win32 )

--

zum Seitenanfang zum Seitenende Profil || Suche
005
10.12.2002, 18:20
Sonium



afaik ist "int main()" eine neuere Konvention. Ich nehm auch immer int main()
In manchen Batchdatein hab ich es schon gesehen, dass auf diese Rückgabewert zurückgegriffen wurde. z.B. dass das nächste Programm erst aufgerufen wird, wenn das vorherige erfolgreich beendet wurde.

--

---------------------------------
www.killerlevels.de Editing mit Quake III Arena, Urban Terror, Elite Force

zum Seitenanfang zum Seitenende Profil || Suche
006
10.12.2002, 19:58
Tron



das ist _nicht_ scheiss egal, wenn dein c bzw. c++ programm ANSI-konform sein soll muss int main() heissen (bzw. mit den bis zu 3 parametern)

zudem sollte nach korrekter abarbeitung 0 zurueckgegeben werden und != 0 fuer einen fehler. dadurch kann der aufrufer der programms (betriebssystem oder ein anderes programm) entsprechend darauf reagieren, z.b. bricht make ab, falls eines des von ihm aufgerufenen programme nicht 0 zurueckgibt.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
007
12.12.2002, 19:05
Diablo_bth



ich darf mich selbst quoten:

Zitat:

- sofern man daraus keine Programmfehler etc. verdeutlichen will

also ich würde sagen dass sowas hier den Masschienencode nicht wesentlich abändert - und dadurch genauso ASNI-konform is:

Quellcode:
void main()
{
  /* ... */
  __asm xor eax, eax  // entspricht return 0;
  return;
}

--

zum Seitenanfang zum Seitenende Profil || Suche
008
12.12.2002, 19:11
Tron



ansi sagt int main(), das hat nichts mit maschinencode zu tun.
z.b. wer sagt dir, dass die maschine, auf der mein c++ compiler laeuft ein eax register hat oder dass sie nicht sofort diverse fehlerbehandlungsroutinen aufruft, falls der prozess nicht mit 0 zurueckkehrt...

ansi sagt int main() (bzw. mit parametern) und damit basta
void main() geht zwar (noch) aber ist 'deprecated' (misbilligt)

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
009
17.12.2002, 11:03
TheVoice



Ich muss hinzufügen: Tron hat zu 100% Recht ;-)

Die C++ Tutorials, die ich geschrieben und auf www.resourcecode.de veröffentlicht haben, zeigen in ihren Codebeispielen immer ein void main(), da ich mir zu Anfang gedacht habe, dass es evtl. nicht so toll ist, Sachen wie int main(int argc, char *argv[]) anzuführen, wenn nichtmal das Kapitel über Funktionen (mit Parametern und Rückgabewerten) gelesen wurde.
Ich wollte möglichen missverständnissen vorbeugen - allerdings war das ein Fehler, wie ich später gemerkt hab ;-)

Der ANSI Standard setzt es einfach vorraus, dass main einen Wert zurückgibt, und somit einen Errorcode an's Betriebssystem zurückgeben kann. Unter Windows ist das tatsächlich nicht so ungeheuer wichtig. Unter DOS war's das mal, wenn man z.B. ein Programm aus einer Batchdatei (.BAT) ausgeführt hat, lässt sich nach Beendigung der Executable per

if errorlevel [...] goto irgendeinLabel

einiges Sinnvolles anstellen. Manche Installationsprogramme machten früher Gebrauch hiervon.

Wer unter Linux arbeitet und evtl. entwickelt, wird das noch besser kennen. Dinge wie

tar xzvf archiv.tar.gz && rm archiv.tar.gz

würden sonst nicht funktionieren können, denn die aufrufende Shell (z.B. Bash) benötigt hier den Rückgabewert von tar um festzustellen, ob tar beim entpacken Erfolg gehabt hat. Wenn nicht, wird rm nicht ausgeführt.

Fazit: Benutzt int main(int argc, char *argv[]), denn damit bekommt ihr in keinem Fall Probleme/Ärger.

Ich werde die Tutorials wohl bald mal überarbeiten, da hier und dort immerwieder mal Fehler aufgetaucht sind. Eine Überarbeitung bietet sich ohnehin an, weil für das Redesign sowieso alle Tutorials etwas angepasst werden müssen.

--

Against TCPA | Resourcecode.de | Blender 3D | [ Darkzone | Pandorra | Alpine ]


Dieser Beitrag wurde am 17.12.2002 um 11:06 von TheVoice bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche