Maison >développement back-end >C++ >`argv[0]` est-il toujours le nom de l'exécutable en C/C ?

`argv[0]` est-il toujours le nom de l'exécutable en C/C ?

DDD
DDDoriginal
2024-12-09 09:27:06837parcourir

Is `argv[0]` Always the Executable Name in C/C  ?

Argv[0] est-il toujours le nom de l'exécutable ou une simple convention ?

Lors de la fourniture d'arguments à la fonction main() en C ou des applications C, la question se pose : argv[0] représente-t-il invariablement le nom de l'exécutable ? Ou s'agit-il simplement d'une convention répandue, sans garantie d'applicabilité universelle ?

Plonger dans les normes

Pour déterminer la véritable nature de argv[0}, nous devons consulter les normes pertinentes. ISO C11 indique explicitement que lorsque argc dépasse zéro, "argv[0] représente le nom du programme". Cependant, il ajoute de manière cruciale que "argv[0][0] doit être le caractère nul si le nom du programme n'est pas disponible dans l'environnement hôte."

Cette clarification révèle que argv[0] n'incarne que le programme. nom s’il est facilement accessible à partir de l’environnement hôte. De plus, la norme souligne que les valeurs contenues dans argv sont entièrement définies par l'implémentation, soumises aux caprices de l'environnement hôte.

Implications pour les noms de programmes

Par conséquent, le nom du programme peut être vide si l'environnement hôte n'a pas la capacité de le fournir, ou il peut prendre n'importe quelle forme arbitraire s'il est accessible. En théorie, l'environnement hôte pourrait même choisir de fournir un nom de programme charabia pour son amusement !

Considérations de mise en garde

Pourtant, il est impératif de noter que « défini par la mise en œuvre " a une connotation distincte dans les normes ISO. Les implémentations sont tenues de documenter leur comportement spécifique en détail. Par conséquent, même des plates-formes comme UNIX, connues pour leur flexibilité dans le remplissage de argv[0] avec du contenu arbitraire via la famille de commandes exec, doivent officiellement enregistrer leurs pratiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn