Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

23.10.2009, 16:43

Kein Problem. :)

Aber ich finde es wichtig, klarzustellen, dass void main() einfach nur falsch ist. Die vielen schlechten C++-Bücher, die es leider auf dem Markt gibt, ändern auch nichts an dieser Tatsache, tragen aber massiv zur Verbreitung von solchem Irrglauben bei.

Es gibt absolut keinen Grund, void main() einzusetzen. Man gewinnt nichts dadurch.

P.S.: In diesem Tutorial sind gerade ein paar Aussagen zu aktuellen Punkten zu finden:
http://tutorial.schornboeck.net/groessten_luegen.htm

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

23.10.2009, 16:44

Zitat von »"Nexus"«

Kein Problem. :)

Aber ich finde es wichtig, klarzustellen, dass void main() einfach nur falsch ist. Die vielen schlechten C++-Bücher, die es leider auf dem Markt gibt, ändern auch nichts an dieser Tatsache, tragen aber massiv zur Verbreitung von solchem Irrglauben bei.


Find ich auch wichtig und hab das gleich mal meinem Prof gedrückt... Sein Kommentar: Mir doch egal! :-]

13

23.10.2009, 16:49

Zitat von »"David_pb"«

Find ich auch wichtig und hab das gleich mal meinem Prof gedrückt... Sein Kommentar: Mir doch egal! :-]
Stimmt, die hab ich vergessen. Neben den Büchern sind auch lernresistente Professoren für solchen Irrglauben verantwortlich. ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

23.10.2009, 16:53

Ich denke das Problem ist halt dass C++ schon älter ist als der Standard und z.B. der MSVC6 als prä-Standard Compiler eben auch void main() erlaubt hat und das deswegen noch in altem code, alten Tutorials und alten Köpfen so drin ist...

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

15

24.10.2009, 16:54

Zitat von »"Nexus"«


Der Rückgabewert ist auf int festgelegt, Punkt. Was implementation-defined sein kann, ist "otherwise its type", also der Rest des Funktionstyps. Konkret sind damit die Parameter gemeint.

Der Compiler darf also wie du sagst weitere Signaturen mit dem Namen "main" unterstützen. Doch der Rückgabetyp gehört nicht zur Signatur.


Hatten wir nicht mal auf c-plusplus.de die gleiche Diskussion, wo es dann auf die auslegung des "but" hinauslief? Afaik liesse sich der Satz (rein sprachlich) auch auf die Art von david auslegen. Das finde ich manchmal an dem Standard ein wenig ungeschickt, wenn sich gewisse Regeln sprachlich verschieden deuten lassen.. Ich meine es wäre so einfach diesen Satz verständlich und dennoch genau so exakt hin zu schreiben..

btw:
Was meinst du, dass der Rückgabety nicht zur Signatur gehört? - Die gehört sehr wohl dazu. In diesem Falle natürlich ausgeschlossen, aber grundlegend gehört der dazu..

16

24.10.2009, 17:07

Zitat von »"drakon"«

Hatten wir nicht mal auf c-plusplus.de die gleiche Diskussion, wo es dann auf die auslegung des "but" hinauslief? Afaik liesse sich der Satz (rein sprachlich) auch auf die Art von david auslegen.
Das fände ich aber recht weit hergeholt. Was würde dann der Satz "It shall have a return type of type int" bringen, wenn alles implementation-defined wäre? Ausserdem brauchst du jetzt nicht den void main()-Verfechtern Mut zu machen. Ich hoffte, wir könnten das mal klarstellen... :p

Zitat von »"drakon"«

Was meinst du, dass der Rückgabety nicht zur Signatur gehört? - Die gehört sehr wohl dazu. In diesem Falle natürlich ausgeschlossen, aber grundlegend gehört der dazu..
Nein, Signatur besteht nur aus Name, Parametertypen (ohne Toplevel-CV-Qualifizierungen) und const/volatile bei Memberfunktionen. Wie ich gerade noch gesehen habe, zudem aus Klassenzugehörigkeit bei Membern und Templateargumenttypen bei Spezialisierungen von Funktionstemplates. Diese zwei Dinge sind eigentlich klar, aber da denkt man nicht gerade dran. ;)

Deshalb spricht man auch davon, dass sich bei Funktionsüberladung die Signaturen unterscheiden müssen. Überladung über unterschiedliche Rückgabetypen funktioniert nicht. Was du meinst, ist der Funktionstyp.

Quelle:

Zitat

1.3.10 signature [defns.signature]
the information about a function that participates in overload resolution (13.3): the types of its parameters
and, if the function is a class member, the cv- qualifiers (if any) on the function itself and the class in which
the member function is declared.2) The signature of a function template specialization includes the types of
its template arguments (14.5.5.1).

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

17

24.10.2009, 17:12

Hmm. Mist. Da hätte ich nochmal im Standard reinschauen müssen. Hatte das im Kopf, aber das war anscheinend in Eiffel so definiert.. -.-

18

24.10.2009, 17:13

Zitat von »"drakon"«

Hmm. Mist. Da hätte ich nochmal im Standard reinschauen müssen. Hatte das im Kopf, aber das war anscheinend in Eiffel so definiert.. -.-
Hehe, kein Problem. Manchmal habe ich auch Mühe mit solchen Spitzfindigkeiten... Aber ich glaube, Eiffel tut dir nicht gut. :lol:

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

19

24.10.2009, 17:24

Zitat von »"Nexus"«

Aber ich glaube, Eiffel tut dir nicht gut. :lol:

Definitiv nicht..

btw:
Je länger ich mir das so überlege, desto eher finde ich, dass der Rückgabetyp ebenfalls zur Signatur gehören sollte. Empfinde ich als inkonsistenz, dass sie das nicht tut.. Für den Aufrufer ist der Typ des Rückgabewertes ja genau so wichtig, wie Parameter. Mehr noch wäre eine Überladung anhand des Rückgabetypes recht nett und eigentlich auch irgendwie eine logische Folgerung.

20

24.10.2009, 17:31

Zitat von »"drakon"«

Je länger ich mir das so überlege, desto eher finde ich, dass der Rückgabetyp ebenfalls zur Signatur gehören sollte. Empfinde ich als inkonsistenz, dass sie das nicht tut.. Für den Aufrufer ist der Typ des Rückgabewertes ja genau so wichtig, wie Parameter.
Ich würde die Signatur nicht unbedingt als wichtigen Teil der Funktion ansehen, das ist wahrscheinlich der falsche Ansatz. "Signatur" ist für mich einfach ein Begriff, mit dem man im Standard effektiv arbeitet. Sonst - gerade bei Überladung - wäre die ganze Zeit von "Signatur ohne Rückgabetyp" oder so die Rede, was ja auch nicht das Wahre sein kann.

Wie bereits erwähnt: Es gibt ja noch den Funktionstypen, der sich unter anderem über Rückgabetyp und Parametertypen definiert. Oder schlicht und einfach Funktion, wenn man auch noch auf die konkrete Entität Bezug nehmen will.

Zitat von »"drakon"«

Mehr noch wäre eine Überladung anhand des Rückgabetypes recht nett und eigentlich auch irgendwie eine logische Folgerung.
Wie willst du das denn realisieren?

Werbeanzeige