C++ - int main (int argc, char** argv) [dupliquer]
possibilité de duplication:
Quelle est la déclaration correcte de main?
Qu'entendons-nous par les arguments de cette fonction main
? Ce que tentent-ils à nous dire?
int main(int argc, char** argv)
mise à JOUR: Et, est la ligne de code précédente similaire à ce int main(int argc, char* argv[])
? Si oui, comment pouvons-nous dire que char** argv
est similaire à char* argv[]
car ils ne semblent pas similaires d'un tableau point de vue?
comment est-il comparé avec int main()
qui n'a pas d'arguments?
Merci.
5 réponses
le paramètre argc
est le nombre d'options de ligne de commande spécifiées, y compris le nom exécutable, lorsque l'exécutable a été invoqué. Les options individuelles de la ligne de commande se trouvent dans le tableau argv
, qui est NULL
terminé (le nom et le chemin utilisés pour invoquer l'exécutable est dans argv[0]
).
la différence entre les deux versions est simplement si vous voulez analyser les arguments en ligne de commande ou pas - si vous n'êtes pas intéressé par eux ensuite, vous pouvez les ignorer en utilisant le second formulaire.
Wikipedia offre une bonne explication. Le premier paramètre vous donne le nombre d'arguments de ligne de commande, et le second vous donne les arguments.
ils représentent les paramètres de la ligne de commande.
argc est le nombre de paramètres de ligne de commande, y compris le nom de l'exécutable.
argv est un tableau de chaînes à terminaison nulle, où argv[0]
est le paramètre de ligne de commande, et argv[i]
est le ième paramètre après cela, argv[argc-1]
étant le dernier et argv[argc]
est en fait bien défini et un pointeur nul.
ainsi:
foo bar baz
sur la ligne de commande ont argc
=3, argv[0]
="foo" argv[1]
="barre" argv[2]
="baz" argv[3]
= NULL
notez qu'il n'y a pas de pièce jointe spéciale placée pour les arguments" flag".
grep -i foo bar.cpp bar.h
aurait 4 arguments (argc=5 incluant grep lui-même), - i étant l'un d'eux et ceci s'appliquerait même si le paramètre suivant était une" valeur " attachée au drapeau.
Note Si vous avez fait un joker
grep -i foo *
dans UNIX au moins, le * serait étendu avant l'appel dans grep et donc chaque fichier qui correspondrait serait un argument.
incidemment
char** argv
et char* argv[]
faire la même chose.
aussi bien que la norme dit que vous devez utiliser l'un de ces signatures (vous ne devriez même pas ajouter de consts) il n'y a pas de loi que vous devez utiliser ces deux noms de variables, mais il est tellement conventionnel maintenant qu'ils sont à peu près beaucoup universelle. (par exemple, vous pourriez utiliser argCount
et argValues
si vous voulez).
argc vous donne le nombre d'arguments et argv vous donne ces arguments. Le premier est le chemin d'accès à l' .exe utilisés pour exécuter votre programme, les suivantes sont des arguments de l'appelant de votre .exe fourni sur la ligne de commande comme ceci:
my.exe arg1 arg2
attendu que
int main() {}
ignore simplement les arguments.
argv est un tableau contenant les paramètres de ligne de commande passés à l'application. argc vous indique le nombre d'éléments contenus dans ce tableau.