Welchen Sinn hat es Argumente an die Main Methode in c++ zu übergeben?

6 Antworten

Na, wozu sidn Argumente überhaupt da?

Um zu parametriesieren und so das Programm direkt beim Aufruf zu steuern.

cp somedir someotherdir

somedir und someotherdir sind Argumente, die an main() übergeben werden und den Programmablauf steuern.

Die Main Methode ist der Einstiegspunkt der Anwendung. Wenn du die Anwendung von zum Beispiel der CMD Konsole öffnest, in etwa so:

anwendung.exe "Hallo"

dann ist eines der Argumente nun "Hallo" und kann in der Main Methode weiterverarbeitet werden


Valentin1720653 
Fragesteller
 10.05.2022, 23:59

Achso okay also relativ einfach. Aber mir fällt so spontan keine sinnvolle Anwendungsmöglichkeit ein die mehr ist als "Das Programm kann den Nutzer direkt mit seinem Namen ansprechen" ?

0
FaTech  11.05.2022, 00:19
@Valentin1720653

Zum Beispiel einen Browser:

browser.exe url

Oder Dateien übergeben:

fotoapp.exe bild.png

Oder Eine Konverter App die nur als "plugin" dient und somit nicht komplett alleine läuft, wie ffmpeg ... Es gibt viele Möglichkeiten, warum das Sinnvoll sein kann. Ich habe es mal für einen Updater benutzt, wo ich aus der Anwendung rausgesprungen bin, in eine andere exe und zurück und das mit parameter Übergabe verifiziert habe.

0

Das einfachste Beispiel ist der "DIR" Befehl in der Eingabeaufforderung:

Bild zum Beitrag

ruft man die Befehle mit "/?" auf, wird aufgelistet welcher Parameter der jeweilige Befehl unterstützt und liefert eine Hilfe.

Unter Linux erreicht man das selbe mit "--help" bei "ls".

Bild zum Beitrag

Selbst das Setup von Windows unterstützt den Parameter "?".

Bild zum Beitrag

Vermutlich ist dies was der Prof meint. Die Kommandozeilenparameter müssen lediglich geparst werden und die entsprechende Funktion aufgerufen werden.

 - (Computer, programmieren, Informatik)  - (Computer, programmieren, Informatik)  - (Computer, programmieren, Informatik)

Weil sich viele Programme sonst gar nicht nutzen lassen. Wie sonst sollte ein Anwender so ein Programm in eine Struktur einbinden?
Er müsste ja sonst die zu verarbeitenden Werte immer von Hand eintippen.


Valentin1720653 
Fragesteller
 10.05.2022, 23:58

Ne überhaupt nicht. Dafür gibt's ja in der Std-bibliothek zB Filestreams. Wenn man das Programm aufruft kann man dann ganz präzise Anweisungen geben was der Nutzer zu tun hat.

0
RonaId  11.05.2022, 00:07
@Valentin1720653

Du schreibst ein Prog "primzahl".
Du rufst es auf mit "primzahl".
Dann kommt die Frage "Die wievielte Primzahl?"
Du tippst ein: 3
Anzeige: Die 3. Primzahl ist 5.
Was aber, wenn Du nur tippen willst: primzahl 3 und bekommst die Antwort 5, die Du vielleicht sogar gleich an das nächste Programm übergeben willst, ohne die Antwort lesen zu müssen?

0
Valentin1720653 
Fragesteller
 11.05.2022, 00:22
@RonaId

Ja aber dann muss ja ja intuitiv als Nutzer wissen was ich als Argument zu übergeben habe.

Ich kann das Programm auch einfach ohne Argumente starten und dann den Nutzer über ein Filestream direkt fragen die wievielte Primzahl er haben möchte. Dann muss er noch raten was für ein Argument die Main() braucht

0
RonaId  11.05.2022, 08:10
@Valentin1720653

Dafür gibt es das Argument "help"

Wenn Du z.B. unter Linux programmierst, ist eine strikte Trennung von Anwendung und grafischer Benutzeroberfläche die einzig saubere Struktur.
Also kann nicht immer im Konsolenprogramm jede grafische Interaktion in die Konsole getippt werden.
Und was wäre, wenn Du das beschriebene Programm "primzahl" über ein Shell-Script zur Primfaktorenzerlegung verwenden willst?

0

Servus!

Ich kann zwar nicht über C++ reden, aber generell kannst du bei den meisten Programmiersprachen Argumente in der Main Methode angeben. Wofür? Wenn du das Programm über die Kommandozeile startest, eventuell CMD auf Windows oder ähnliches, dann kannst du dort deine Argumente mitgeben. Hat verschiedenste Gründe. Angenommen du hast ein Programm, welches eine Datei lesen soll. Du könntest als Argument in der Main methode einen String erwarten, der sen Dateipfad darstellt. Über die Kommandozeile kannst du das dann angeben. Brauche ich in meiner Praxis nie, ist aber oft in Verwendung.

LG,

Alex

Woher ich das weiß:Hobby

Valentin1720653 
Fragesteller
 11.05.2022, 00:02

Okay das ist klar, ich verstehe nur nicht so ganz warum man das nutzen sollte.

Fur den von dir genannten Zweck würde ich einfach ein istream oder ostream Objekt verwenden.

Wenn man das Programm startet kann man dann auch Anweisungen an dem Nutzer geben was er dafür zu machen hat.

Wenn ich ein Programm schreibe was bei seinem Aufruf schon nach Argumenten fragt ohne dass der Nutzer davon weiß ist das doch eher benutzerunfreundlich oder ?

1
TheAlexGamer575  11.05.2022, 00:11
@Valentin1720653

Mir fallen gerade nur verwaschen Beispiele ein, aber stell dir mal folgendes vor. Ein Programm ist nur dazu da, eine Datei runterzuladen. Als Argument wird ein Pfad eines Ordners benötigt. Das Programm hat keine grafische Benutzeroberfläche, wo soll es dann geatartet werden? Nicht jeder hat einen Code Editor, jemand will das Programm aber trotzdem nutzen, weil es irgendwas wichtiges runterlädt. Dann muss er es über ein Kommandozeilenprogramm starten. Beispiel: `start download.exe "D:/NeuerOrdner"`. Und das Programm macht den rest. Dadurch erspart sich das Programm, extra auf User-Input zu warten. Meistens ist das Online dokumentiert, sonst wprde keiner wissen, dass das anzugeben ist.

0
TheAlexGamer575  11.05.2022, 00:13
@TheAlexGamer575

Meist wird es einfach als Konfiguration genommen, wo man bestimmte, meist optionale, Daten an das Programm weitergeben kann

0
Valentin1720653 
Fragesteller
 11.05.2022, 00:17
@TheAlexGamer575

Okay das ist zwar ein sehr "zurechtgerücktes" Beispiel aber das lasse ich Mal durchgehen 😀 dass man den Pfad nicht in eine extra Textdatei schreiben will find ich ja noch okay, aber "ich hab keinen Texteditor" 😅 ich glau das ist dann etwas zu viel des guten oder 🤭.

Ich würde in diesem Fall zwar entweder schnell ein kleines GUI basteln (gibt ja sehr lightweight Bibliotheken dafür) aber falls ich das nicht will oder kann kann man es natürlich auch so machen.

1