Il semble que le est toujours
, donc je pense que nous pouvons parcourir la liste d’arguments sans . Un seul
boucle va le faire.
S’il y a toujours un à la fin de
, pourquoi avons-nous besoin d’un `` ?
Il semble que le est toujours
, donc je pense que nous pouvons parcourir la liste d’arguments sans . Un seul
boucle va le faire.
S’il y a toujours un à la fin de
, pourquoi avons-nous besoin d’un `` ?
Oui, argv[argc]==NULL
est garanti. Voir C11 5.1.2.2.1 Programme de démarrage (mon emphase)
S'ils sont déclarés, les paramètres de la fonction main doit obéir les contraintes suivantes:
La valeur de argc doit être positif ou nul. argv[argc] est null pointeur.
Offrant argc
n'est donc pas indispensable mais est toujours utile. Entre autres choses, il permet de rapidement vérifier que le bon nombre d'arguments a été adoptée.
Edit: La question a été modifiée pour inclure le C++. n3337 projet 3.6.1 fonction Principale dit
2 ...argc est le nombre d'arguments passés au programme de l'environnement dans lequel le programme est exécuté. .... La valeur de argc doit être non négatif. La valeur de argv[argc] sera de 0.
Oui, argv[argc]
est garanti pour être un pointeur null. argc
est utilisé à des fins de commodité.
Citant l'explication officielle de C99 Justification, notez les mots redondants vérifier:
Justification de la Norme Internationale - Langages de Programmation - C §5.1.2.2.1 démarrage du Programme
La spécification de l'
argc
etargv
comme arguments aumain
reconnaît préalable approfondie de la pratique.argv[argc]
est nécessaire pour être un pointeur null pour fournir une vérification redondants pour la fin de la liste, sur la base de la pratique courante.
Nous avons "besoin", parce qu'il est requis par les différentes normes.
Nous sommes libres d'ignorer totalement la valeur, mais depuis qu'il est premier paramètre de main
, on doit l'avoir dans la liste de paramètres. En C++ (et probablement non-standard C dialectes), vous pouvez omettre le nom du paramètre, comme ceci C++ extrait de (facile à convertir à C):
#include <stdio.h> // C-compatible include, guarantees puts in global namespace
// program will print contents of argv, one item per line, starting from argv[0]
int main(int /*argc*/, char *argv[]) { // uncomment argc for C
//(void)argc; // uncomment statement for C
for (int i=0; argv[i]; ++i) {
puts(argv[i]);
}
return 0;
}
En C standard, avec des paramètres d'avertissement, inutilisé paramètre génère avertissement, qui peut être fixé par une instruction comme celle - (void)argc;
ce qui fait que le nom soit utilisé sans générer de code.
argc
est agréable d'avoir, parce que sinon, de nombreux programmes ont besoin de marcher thorugh les paramètres pour obtenir le nombre. Aussi, dans de nombreux langages de programmation avec des tableaux qui ont la longueur, il n'est pas tout argc
paramètre, il y a juste un tableau avec les éléments.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.