Wie kompiliere ich ein C-Projekt mit mehr als einer Hauptfunktion?

9

Ich bin neu in C und lese jetzt ein Lehrbuch und werde seine Beispiele anwenden.

Das Problem ist, wenn ich ein neues Projekt erstelle und versuche, mehr als eine Datei, die eine Hauptfunktion enthält, den Linker zu setzen (so wie ich es sage, sagt ich:

%Vor%

(Übrigens habe ich viele IDEs, MonoDevelop, QT Creator, VS2010, Codebloks, ...) benutzt Ich verwende derzeit QT Creator, es scheint eine sehr schöne IDE zu sein.

Also gibt es keine Problemumgehung, um dieses Problem zu lösen?

BEARBEITEN:

Ich frage, weil ich gerade in der Lernphase bin und momentan keine wirkliche Programmierung mache. Ich brauche nur einen einfachen Weg, um Programme in C zu erstellen, ohne ein separates Projekt pro Buchbeispiel erstellen zu müssen. Zur gleichen Zeit möchte ich nicht die Gedit / VI + Kommandozeile verwenden.

Also, gibt es keinen Weg, wie das Projekt zu säubern, dann kompiliere die - nur - eine Datei, die ich ausführen muss ??? BTW, In JAVA können wir ein Programm ausführen, das mehr als ein Hauptprogramm enthält (die IDE gibt mir die Wahl zwischen ihnen)

    
Muhammad Hewedy 21.05.2010, 05:25
quelle

14 Antworten

1

Tatsächlich finde ich, dass Dev-C ++ unterstützt, an mehreren Hauptdateien zu arbeiten, die nicht Teil eines Projekts sind, so dass ich so viele Dateien erstellen kann, wie ich brauche.

Danke allen, die hier arbeiten :) Viel Glück für alle.

Auch für Linux / win habe ich Code :: Blocks gefunden. Danke.

    
Muhammad Hewedy 26.05.2010, 03:20
quelle
9

Was versuchst du mit den multiplen main Funktionen zu machen?

Wenn Sie versuchen, mehrere verschiedene Programme gleichzeitig zu kompilieren, müssen Sie jedes Programm einzeln kompilieren (d. h. nur ein main pro Programm).

Wenn Sie versuchen, ein Programm zu kompilieren und die mehreren main -Funktionen all ausführen möchten, können Sie das nicht. Sie müssen nur ein main angeben und die anderen zu etwas anderem umbenennen (und sie von der einzelnen main in der Reihenfolge aufrufen, in der sie ausgeführt werden sollen).

Wenn Sie versuchen, nur eine der Funktionen main als einzigen Einstiegspunkt für Ihr Programm zu verwenden und die anderen zu ignorieren, sollten Sie die Dateien beim Verknüpfen nicht mit den anderen main s einschließen. Ich schlage vor, jedes main in einer separaten Datei zu speichern, wenn Sie sie behalten möchten, und nur eine dieser Hauptdateien beim Verknüpfen / Kompilieren einbeziehen.

Wenn Sie diesen Fehler irrtümlicherweise erhalten, dann machen Sie wahrscheinlich etwas falsch mit dem Projekt in Ihrer IDE. Vielleicht versuchst du versehentlich, mehrere verschiedene Programme zu einem zu kompilieren? Möglicherweise müssen Sie jede Datei mit einem main als separates Build-Produkt angeben. C ist nicht wie Java, wo Sie eine main -Methode in jede Klasse einfügen und angeben können, welche Sie aufrufen möchten. Die main in C ist ein globaler Name.

    
Arkku 21.05.2010 05:35
quelle
4

Sie können möglicherweise nicht mehr als einen Einstiegspunkt in Ihrer Bewerbung haben. Wenn die endgültige ausführbare Datei gestartet wird, wird die Einstiegspunktfunktion (main) aufgerufen. Und das kann nicht zweideutig sein.

Wenn Sie sie also nacheinander aufrufen wollten, könnten Sie sie wie folgt verketten:

%Vor%

Sie können sie sogar mit Threads (z. B. boost.Thread) aufrufen, so dass sie parallel laufen. Sie können jedoch nicht mehrere Funktionen namens main miteinander verknüpfen.

Wenn Sie stattdessen möchten, dass sie jeweils separate Programme sind, müssen Sie sie separat verknüpfen.

    
abenthy 21.05.2010 05:28
quelle
2

Jedes Programm muss genau eine Hauptfunktion haben. Main kann jedoch jede gewünschte Funktion aufrufen (einschließlich sich selbst, obwohl dies verwirrend sein kann). Daher sollten Sie das Programm in logische Teile aufteilen.

    
Matthew Flaschen 21.05.2010 05:28
quelle
2

Wie viele schon gesagt haben, können Sie nur ein Hauptprogramm pro Programm haben. Sie möchten nicht die Mühe machen, für jedes Beispiel ein neues Projekt zu erstellen, während Sie ein Buch durchgehen. Das ist verständlich, aber Sie müssen das grundsätzlich tun. Ich sehe zwei Alternativen:

  1. Verwenden Sie die neue Projektfunktion in Ihrer IDE (wie VS2010). Dies wird all die harte Arbeit für Sie tun. Sie können sie später immer löschen.
  2. Wenn Sie nicht daran interessiert sind, den Code herumzuhalten, leeren Sie einfach die Datei (oder sogar die Funktion main ()) und verwenden Sie sie erneut. Bei Buchbeispielen werden Sie den Code wahrscheinlich nie wieder besuchen, daher sollte nur das Löschen gut sein.
Steve Rowe 21.05.2010 05:44
quelle
2

Sie können mehr als ein main im selben Projekt haben, wenn jedem main eine andere ausführbare Datei in der Baumstruktur des Builds entspricht.

Im folgenden Beispiel wird CMake verwendet, ich weiß nicht, ob es mit einer anderen Build-Process-Manager-Software durchgeführt werden kann.

Speichern Sie die folgenden beiden CPP-Dateien in einem Ordner mit dem Namen source und nennen Sie sie square_root.cpp und power_of_two.cpp:

Quadratwurzel.cpp:

%Vor%

power_of_two.cpp:

%Vor%

Beachten Sie, dass beide Methoden eine Methode enthalten. Fügen Sie dann im selben Ordner eine .txt namens CmakeLists.txt hinzu: Sie teilt dem Compiler die Nummer der ausführbaren Datei mit, wie Sie sie aufrufen und wo Sie die Hauptdateien finden.

CmakeLists.txt:

%Vor%

Erstellen Sie einen neuen Ordner namens build im selben Stammverzeichnis der Quelle, und verwenden Sie dann cmake, um sie zu communizieren und zu generieren. Sehen Sie sich die Struktur des Ordners an, der in dem Ordner erstellt wurde. Öffnen Sie ein Terminal im Build und geben Sie make ein.

%Vor%

Wenn keine Fehler auftreten, haben Sie zwei ausführbare Dateien: Square2 und Power2.

%Vor%

Sie haben also das gleiche Projekt mit zwei Hauptleitungen, die zwei verschiedene Anwendungen zusammengestellt haben. Die beiden cpp-Dateien können dann den gleichen Header und zusätzliche Methoden in anderen .cpp- oder .h-Dateien im Projekt verwenden. Ich schlage vor, auch das cmake Tutorial Ссылка zu betrachten Es kann andere Methoden geben, um ähnliche, wenn nicht die gleichen Ergebnisse zu haben, aber ich kenne keine. Hoffe anderer Benutzer wird zu diesem Thread beitragen!

    
SeF 07.07.2016 14:19
quelle
0

Ich nehme an, eine Ihrer IDEs erstellt automatisch eine Datei mit einer main -Funktion. Überprüfen Sie, ob bereits eine erstellt wurde.

    
Chris Cooper 21.05.2010 05:28
quelle
0

Sie können nicht mehrere Definitionen von main haben. Die "Hauptfunktion" definiert im Wesentlichen, was Ihr Programm tut. Wenn Sie mehr als eine Kopie von main hatten, welche würden Sie erwarten, ausgeführt zu werden?

Die Lösung für Ihr Problem ist die Verwendung von Bibliotheken; Wenn Sie die Funktionalität wiederverwenden möchten, sollten Sie eine Bibliothek erstellen, die im Grunde mit einem Programm identisch ist, außer dass es Funktionen und Daten (wie ein Programm) hat, aber keine spezielle Funktion namens "main" hat hat keinen "Einstiegspunkt", an dem die Ausführung beginnen sollte, wenn es vom Betriebssystem doppelt angeklickt oder auf andere Weise geladen wird. Bibliotheken gibt es in zwei Varianten: geteilt / dynamisch und statisch. Entweder sollte man tun. Jedes Programm, das Sie erstellen, hat eine eigene Hauptfunktion, aber Sie können Ihre Bibliothek ohne Probleme in verschiedenen Programmen wiederverwenden.

Nun zum praktischen Element zum Erstellen einer Bibliothek ... siehe meine C ++ Bibliotheksprojektvorlage .

    
Michael Aaron Safyan 21.05.2010 05:32
quelle
0

Wie andere bereits gesagt haben, kann Ihr Projekt nur eine einzige Hauptfunktion haben.

Warum versuchen Sie, mehr als eine Hauptfunktion zu haben? Liegt es daran, dass Sie mehrere kleine Beispielprogramme in ein Projekt einfügen und jedes davon ein Hauptprogramm hat? Wenn dies der Fall ist, müssen Sie möglicherweise für jedes Beispiel ein separates Projekt erstellen, damit Ihre IDE den Compiler nicht dazu auffordert, Quellen aus mehreren Beispielen in einem Programm zu kompilieren / verlinken. Ihre IDE unterstützt möglicherweise auch ein Konzept wie ein Ziel, das es Ihnen ermöglicht, Code für mehrere verwandte Programme in einem Projekt zu speichern und dann auszuwählen, welches Programm (Ziel) tatsächlich erstellt werden soll. Die IDE kompiliert dann nur die Dateien in diesem Ziel.

    
vkit 21.05.2010 05:39
quelle
0

Verwenden Sie ein statisches Schlüsselwort, z. B .:

file1.cpp:

%Vor%

file2.cpp:

%Vor%

zum Kompilieren fügen Sie /DRUN_FILE2 oder /DRUN_FILE1 hinzu.

Nur eine Idee.

    
XAder 21.05.2010 08:47
quelle
0

Wenn Sie MS-Linker verwenden, verwenden Sie die Option / FORCE: MULTIPLE Linker. Das erste gefundene Hauptsymbol wird gewinnen. Nicht sicher, was die Option für andere Linker ist.

    
jaws 21.05.2010 18:34
quelle
0

Nun, ich denke, dass QtCreator eine großartige IDE ist.

Zum Lernen und Testen wäre es schön, mehrere haben zu können Netz für die Benutzerfreundlichkeit, aber wie bereits erwähnt, können Sie nur eine Hauptleitung haben weil so ein Projekt in QTcreator / .pro qmake Dateien definiert ist.

Sie könnten mehrere Ziele in pro oder make / CMAKE-Dateien erstellen.

Aber zum Testen habe ich das in der .pro-Datei für das Projekt gemacht.

%Vor%

Ich tausche einfach den Hauptdateinamen in der Variable MAIN in der Profildatei aus. Verwenden Sie es in der Variable SOURCES.

Wie Sie sehen können, teste ich mehrere Implementierungen von Bäumen. Im Moment teste ich eine einfache Variante von Bäumen, wo ich eine neue Implementierung für das Finden eines bestimmten Knotens ausprobiere, bevor ich sie auf dem ausgeglichenen Baum teste.

Die Methode ist jedoch nicht perfekt, da Sie nicht dieselben Namen für Funktionen usw. haben können. Und nach einer Weile kann es schwierig sein, neue Namen für find_node () oder traverse_tree () zu finden     

cognacc 21.10.2012 00:12
quelle
0

In QtCreator können Sie mit der rechten Maustaste auf eine Datei klicken und die Option "Kompilieren" auswählen, die nur die ausgewählte Datei und die erforderlichen Abhängigkeiten kompiliert. Also, wenn Sie eine Ihrer Hauptdateien so kompilieren und diese Datei keine andere Hauptdatei enthält, sollte das funktionieren.

    
Grizix 07.11.2013 10:47
quelle
0

Die beste Lösung, die ich finden konnte, war Eclipse Erstellen von Projekten jedes Mal, um eine einzelne Datei auszuführen? Es gibt einige Alternativen, als ein neues Projekt für jedes Programm zu erstellen.

    
Funny Geeks 27.06.2016 20:03
quelle

Tags und Links