C ++ - int main (int argc, char ** argv) [doppelt]

9

Was meinen wir mit den Argumenten in dieser main Funktion? Was versuchen sie uns zu sagen?

int main(int argc, char** argv)

UPDATE: Und ist die vorhergehende Codezeile ähnlich wie int main(int argc, char* argv[]) ? Wenn ja, wie können wir sagen, dass char** argv ähnlich zu char* argv[] ist, da sie aus der Sicht eines Arrays nicht ähnlich aussehen?

Wie wird es mit int main() verglichen, das keine Argumente hat?

Danke.

    
Simplicity 04.03.2011, 09:33
quelle

5 Antworten

9

Der Parameter argc ist die Anzahl der angegebenen Befehlszeilenoptionen, einschließlich des ausführbaren Namens, als die ausführbare Datei aufgerufen wurde. Die einzelnen Befehlszeilenoptionen befinden sich im Array argv , wobei NULL beendet ist (der Name und Pfad zum Aufrufen der ausführbaren Datei lautet in argv[0] ).

Der Unterschied zwischen den beiden Versionen besteht einfach darin, ob Sie Befehlszeilenargumente parsen wollen oder nicht - wenn Sie nicht daran interessiert sind, können Sie sie mit dem zweiten Formular ignorieren.

    
trojanfoe 04.03.2011, 09:36
quelle
4

Wikipedia bietet eine gute Erklärung. Der erste Parameter gibt Ihnen die Anzahl der Befehlszeilenargumente, und der zweite gibt Ihnen die tatsächlichen Argumente.

    
Björn Pollex 04.03.2011 09:36
quelle
3

Sie stellen die Befehlszeilenparameter dar.

argc ist die Anzahl der Befehlszeilenparameter einschließlich des Namens der ausführbaren Datei. argv ist ein Array von nullterminierten Strings, wobei argv[0] der Befehlszeilenparameter ist und argv[i] der i-te Parameter danach ist, argv[argc-1] ist der letzte und argv[argc] ist tatsächlich gut definiert und ein NULL-Zeiger .

Also:

foo bar baz

in der Befehlszeile hat argc = 3, argv[0] ="foo" argv[1] ="bar" argv[2] ="baz" argv[3] = NULL

Beachten Sie, dass keine speziellen Anhänge für "Flag" -Argumente vorhanden sind.

grep -i foo bar.cpp bar.h

hätte 4 Argumente (argc = 5 einschließlich grep selbst), -i ist einer von ihnen und dies würde gelten, selbst wenn der nächste Parameter ein "Wert" wäre, der an das Flag angehängt ist.

Beachten Sie, wenn Sie einen Platzhalter gemacht haben

grep -i foo *

zumindest in UNIX, das * würde vor dem Aufruf in grep erweitert werden und somit würde jede Datei, die übereinstimmte, ein Argument sein.

Übrigens

char** argv und char* argv[]

mach das Gleiche.

Auch wenn der Standard sagt, dass Sie eine dieser Signaturen verwenden müssen (Sie sollten nicht einmal irgendwelche Konflikte hinzufügen), gibt es kein Gesetz, dass Sie diese beiden Variablennamen verwenden müssen, aber es ist so konventionell, dass sie jetzt ziemlich hoch sind Universal. (d. h. Sie könnten argCount und argValues verwenden, wenn Sie möchten).

    
CashCow 04.03.2011 09:39
quelle
2

argc gibt Ihnen die Anzahl der Argumente und argv gibt Ihnen diese Argumente. Der erste ist der Pfad zu der .exe, mit der Ihr Programm ausgeführt wird, die folgenden sind Argumente, die der Aufrufer Ihrer .exe auf der Befehlszeile wie folgt zur Verfügung stellt:

%Vor%

Während

%Vor%

ignoriert nur die Argumente.

    
Bernd Elkemann 04.03.2011 09:36
quelle
2

argv ist ein Array, das die Befehlszeilenparameter enthält, die an die Anwendung übergeben werden. argc sagt dir die Anzahl der Elemente in diesem Array.

    
Kai 04.03.2011 09:36
quelle

Tags und Links