Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Clythoss Junior JLI'ler
Alter: 44 Anmeldedatum: 04.05.2005 Beiträge: 64 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 17.03.2006, 04:16 Titel: void main(void) und iostream.h |
|
|
Hallo. Ich bin ja eigentlich eher C Coder, hab mich aber jetzt entschlossen C++ zu lernen. Ich hab anfangs mit diesem Tutorial gearbeitet : http://tutorial.schornboeck.net/inhalt.htm , da es mir aber zu anstrengend war auf dem Bildschirm hin und her zu switchen hab ich mir das Buch passend zum Forum besorgt: JLI DirectX 9 und Visual C++. Soweit ist nach alles ok. Nun gibt es in dem Tutorial aus dem Netz eine Passage die sich da nennt " Die größten C++ Lügen." Hier mal 2 Sachen daraus:
Zitat: | void main()
Ich weiß nicht woher das Gerücht kam, vermutlich daher, dass einige Leute den alten K&R-Code missinterpretierten, bei dem wenn kein Rückgabetyp bei einer Funktion angegeben wurde automatisch int angenommen wurde. Aber in zahlreichen Büchern und Tutorials wird erklärt, dass void main() legales C++ sei, dass ist aber falsch! Es gab keinen C++-Standard, der je void main für legal erklärte. Die main-Funktion muss immer int zurückgeben! |
Zitat: | iostream.h
Vor dem C++-Standard (C++98) hatten alle Header der Standard-Library das aus C bekannte .h als Suffix, aber mit dem C++-Standard wurde das .h-Suffix weggelassen und die Standard-Library in den Namespace std verpackt. Denn die neuen Header beinhalten signifikante Änderungen, die teilweise unvereinbar mit den alten Headern sind. Leider wird in zahlreichen Büchern und Tutorials immer noch die alte Methode gelehrt. |
Das wiederspricht aber dem was im Buch steht, wo ja eben beides so gemacht wird. Was ist denn nun richtig? _________________ Derzeitiges Projekt : Wing Fusion
Status: Es geht vorwärts...
-------------------------------------------------------
E=MC²+1W6 |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 17.03.2006, 07:01 Titel: |
|
|
Oha, haltet Patrick fest.
Also so wie das im Buch steht ist es falsch, bzw. nicht mehr zeitgemäß. Die *.h - Standardheader sind alle veraltet und sollten nicht mehr verwendet werden.
Die Funktion 'void main(void)' gibts in diesem Sinne überhaupt nicht (mehr). Ein aktueller Compiler sollte da jedenfalls sofort meckern.
Richtig ist:
CPP: | int main(void)
{
//Programm
//...
//Keine Probleme bis hier her
return 0;
} |
Bzw.:
CPP: | int main(int argc, char** argv)
{
//Programm
//...
//Keine Probleme bis hier her
return 0;
} |
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 17.03.2006, 09:43 Titel: |
|
|
Es ist tatsächlich so, dass der C++-Standard nur das zuläßt, was GreveN beschreibt. Der return Wert am Ende muss übrigens nicht sein.
Visual C++ erlaubt aber in allen Varianten (VC6, VC2002, VC2003, VC2005), auch:
Das ist kein Standard C++, ob es *falsch* ist, ist eine esoterische Frage.
Christian
Zuletzt bearbeitet von Christian Rousselle am 01.05.2006, 20:24, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 17.03.2006, 10:16 Titel: |
|
|
In der dritten Ausgabe des Buches "JLI - Spieleprogrammierung" werden meines Wissens die Standard-Libraries standardkonform ohne .h Suffix eingesetzt.
Außerdem geben alle Mainfunktionen int zurück.
Laut MUT sollte es ca. heute ercheinen. |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 18.03.2006, 00:35 Titel: |
|
|
Wobei man anmerken sollte, dass der Compiler auf der Buch CD(vc6) afaik nur *.h bei Standard-Headern zulässt, von daher ist es schon sinnig bzw. anfängerfreundlich dass es auch im Buch so beschrieben ist. |
|
Nach oben |
|
|
fast hawk Senior JLI'ler
Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 18.03.2006, 08:13 Titel: |
|
|
So gesagt Visual C++ 2005 hat gar keinen "iostream.h" Header mehr nur
noch "iostream". Dazu wird im Buch noch FILE benutzt obwohl ich
dir eher zu streams raten würde.(Was streams angeht ist Patrick ein lexicon ). _________________ Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
|