Les arguments argc
et argv
de main
est utilisé comme moyen d'envoyer des arguments à un programme, la façon la plus familière est probablement d'utiliser le bon vieux terminal où un utilisateur pourrait taper <code>cat file</code> . Ici, le mot cat
est un programme qui prend un fichier et le sort sur la sortie standard ( stdout
).
Le programme reçoit le nombre d'arguments dans argc
et le vecteur d'arguments dans argv
dans l'article ci-dessus. arg ument c serait de deux (le nom du programme compte comme premier argument) et la valeur de arg ument v ecteur contiendrait [ cat
, file
, null ]. Le dernier élément étant un pointeur nul.
En général, vous l'écrivez comme ceci :
int // Specifies that type of variable the function returns.
// main() must return an integer
main ( int argc, char **argv ) {
// code
return 0; // Indicates that everything went well.
}
Si votre programme ne nécessite pas d'arguments, il est tout aussi valable d'écrire un programme de type main
-de la manière suivante :
int main() {
// code
return 0; // Zero indicates success, while any
// Non-Zero value indicates a failure/error
}
Dans les premières versions du langage C, il n'y avait aucune int
avant main
car cela était implicite. Aujourd'hui, cela est considéré comme une erreur.
Sur POSIX -(et Windows), il existe la possibilité d'utiliser un troisième paramètre. char **envp
qui contient un vecteur des programmes env. variables de l'environnement . D'autres variations de la liste d'arguments de la méthode main
existe, mais je ne la détaillerai pas ici car elle n'est pas standard.
De même, la dénomination des variables est une convention et n'a aucune signification réelle. Il est toujours bon de s'y tenir afin de ne pas confondre les autres, mais il serait tout aussi valide de définir main
comme
int main(int c, char **v, char **e) {
// code
return 0;
}
Et pour votre deuxième question, il existe plusieurs façons d'envoyer des arguments à un programme. Je vous recommande de consulter le exec*()
famille de fonctions qui est POSIX -standard, mais il est probablement plus facile d'utiliser simplement system
("command arg1 arg2")
mais l'utilisation de system()
est généralement désapprouvé car il n'est pas garanti qu'il fonctionne sur tous les systèmes. Je ne l'ai pas testé moi-même, mais s'il n'y a pas d'erreur, il est possible de l'utiliser. bash
, zsh
ou tout autre shell installé sur un système *NIX, system()
échouera.