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.

9
demandé sur Community 2011-03-04 12:33:40

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.

9
répondu trojanfoe 2015-01-28 18:15:43

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.

4
répondu Björn Pollex 2011-03-04 09:36:25

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).

3
répondu CashCow 2011-03-04 10:10:40

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.

2
répondu Bernd Elkemann 2011-03-04 09:36:31

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.

2
répondu Kai 2011-03-04 09:36:59