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

Mastermind

unregistriert

11

08.07.2010, 13:22

Zitat

Daher kommt es zu komplikationen wenn es mehrere main Funktionen , da das Betriebsysten nicht weiß , welche
es aufrufen soll.


Also das ist glaube ich Blödsinn. Das Betriebssystem weiß doch gar nichts von der Existenz mehrer main Funktionen. Das weiß nur der Linker und der ist es ja auch der sich beschwert. Würde er aber auch wenn eine Funktion mit irgendeiner anderen Signatur mehrfach definiert wäre.

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

12

08.07.2010, 17:14

Genau gesagt hätten 2 Funktionen, die den gleichen Namen haben die gleiche Adresse, was nicht gehen kann, da der Linker nicht weiß, wo er bei einem Funktinsaufruf der Funktion weitermachen soll bzw. welche er übernehmen soll und welche nicht, er müsste sich ja für eine entscheiden, was nicht geht.

Du selbst kannst dir aber auch schon denken, dass es keine 2 Funktionen mit gleichem Namen geben kann (sofern sie nicht überladen sind und sofern beide sichtbar sind), da du selbst nicht sagen könntest welche Funktion aufgerufen werden soll.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

08.07.2010, 18:22

Genau gesagt hätten 2 Funktionen, die den gleichen Namen haben die gleiche Adresse, was nicht gehen kann, da der Linker nicht weiß, wo er bei einem Funktinsaufruf der Funktion weitermachen soll bzw. welche er übernehmen soll und welche nicht, er müsste sich ja für eine entscheiden, was nicht geht.

Die main Funktion könnte ja überladen sein. :P

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

14

08.07.2010, 18:56

Die main Funktion könnte ja überladen sein.


Zeig mir den Compiler, mit dem das geht ^^

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

15

08.07.2010, 19:01

Och.. Ein Compiler hat damit sicher keine Probleme. Wenn jemand etwas zu beanstanden hat, dann ist es der Linker. ;)

Ich habe nur deine Hypothese weitersgespielt und wenn man mehrere main Funktionen haben dürfte, dann könnte es mehrere Überladungen geben, was deiner Aussage widerspricht.

Ich habe da aber auch darauf angespielt, dass deine Aussage so auch für normale Funktionen gelten müsste. Da man Funktionen gleich benenen kann, aber durch die Überladung vollkommen anders sein können (demnach haben sie auch nicht die gleiche Adresse).

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

08.07.2010, 19:27

Der C++ Standard hätte auch was dagegen :P

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

17

08.07.2010, 19:35

Ja, aber es ging hier imo alleine schon um die technischen Probleme. Dass man es nicht darf steht klar im Standard, aber es geht hier ja darum zu erläutern, warum es denn nicht erlaubt ist, geschweige denn (vernünftig) funktionieren kann mehrere main Funktionen zu haben.

Mastermind

unregistriert

18

09.07.2010, 11:49

Der "Main kann nicht überladen werden" ist bei MSVC++ wirklich ein Compilerfehler (gotcha drakon).

http://msdn.microsoft.com/de-de/library/…28VS.90%29.aspx

Was wirklich interessant ist (im Sinne von ich musste es ausprobieren und hab dadurch was gelernt) ist dass zwei Definitionen von main in verschiedenen Übersetzungseinheiten auch dann aus sicht des Linkers zum selben Symbol werden, wenn sie verschiedene Parameterlisten hatten und dann den "Zwei Definitionen für eine Signatur" Linkerfehler werfen, den der Original Poster hatte und der nichts mehr mit main im speziellen zu tun hat.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

19

09.07.2010, 17:21

Der "Main kann nicht überladen werden" ist bei MSVC++ wirklich ein Compilerfehler (gotcha drakon).


C-/C++-Quelltext

1
2
//Konsole.cpp
int main(int argc, char* argv[]){}


C-/C++-Quelltext

1
2
//test.cpp
int main() {}

ergibt bei mir:

Quellcode

1
2
3
4
5
6
7
Compiling...
Konsole.cpp
test.cpp
Generating Code...
Linking...
test.obj : error LNK2005: _main already defined in Konsole.obj
C:\[...]\Konsole.exe : fatal error LNK1169: one or more multiply defined symbols found


Dass er im gleichen File etwas beanstandet ist natürlich klar (man möchte ja alle möglichen Fehler so früh, wie möglich finden und das hat auch MS bedacht).

Werbeanzeige