2
votes

Que signifie envp?

Je me demande ce que signifie l'abréviation envp , par exemple ici:

int main(int argc, char **argv, char **envp);

Je me demande aussi ce que le v dans argv signifiait initialement. Le v était-il pour "valeur"? Ou peut-être "vecteur"?


6 commentaires

D'après ce que j'ai recherché sur Google (pourquoi pas vous?), Il semble que ce soit les variables d'environnement et ne semble pas être portable, vous ne devriez donc pas l'utiliser de toute façon.


sans contexte, une abréviation peut signifier n'importe quoi, ENVP


S'il s'agit de "variables d'environnement", où est passé le 'p'?


@nngm p signifie pointeur


en.wikipedia.org/wiki/Entry_point#C_and_C++ argc nombre d'arguments, pointeur de variables d'environnement envp


Le nom "argv" venait de B, où c'était une variable globale, un "vecteur" selon le manuel. argv [0] était l'index du dernier argument valide, il n'y avait donc pas de argc .


4 Réponses :


7
votes

La signification est:

  • argv signifie arg ument v
  • argc pour arg ument c ount et
  • envp pour le repassage env p ointer .

Nous pouvons discuter de la bonne ou mauvaise convention de dénomination, mais c'est un usage historique qui remonte au début du langage C: BWKernighan et D.Ritchie déjà utilisés argc et argv pour main () dans leur première édition de Le langage de programmation C en 1978.

Le envp a été ajouté < / a> plus tard du développement UNIX et est une alternative pour utiliser le environ pointeur. J'en ai trouvé une référence dans un livre de 1986, mais c'est certainement encore plus ancien. Il n'a pas besoin d'un compte, car il est terminé par null. Notez qu'il n'est pas portable et donc l'utilisation de getenv () doit être préféré.


4 commentaires

les noms ne sont que des noms de manuels historiques, n'importe quel identifiant pourrait être utilisé à la place.


@Serge en effet. C'est juste une convention. OP voulait juste savoir pourquoi on l'appelait ainsi.


Dans Kernighan et Ritchie, Le langage de programmation C , «argv» est affiché dans l'index en tant que «vecteur d'argument» et non «valeur d'argument». Formatage proposé: arg ument v ector, arg ument c ount, env ironment p ointer.


@EricPostpischil Excellente idée! Merci ! Terminé ✅



0
votes

À partir des spécifications du langage C:

J.5.1 Arguments d'environnement
1 Dans un environnement hébergé, la fonction main reçoit un troisième argument, char * envp [] , qui pointe vers un tableau de pointeurs à caractère nul terminé par un caractère nul, chacun pointant vers une chaîne qui fournit des informations sur l'environnement pour cette exécution du programme (5.1.2.2.1).

Notez que ce troisième argument n'est pas répertorié dans les spécifications du langage C ++, bien que certaines implémentations le soient toujours.


0 commentaires

0
votes

Je n'ai pas étudié l'étymologie des noms d'arguments conventionnels, alors veuillez excuser ma réponse spéculative.

«env» signifie plutôt évidemment des variables d'environnement ou d'environnement.

Le 'p' dans envp pourrait être l'initialisme pour le (s) paramètre (s) ou peut-être un ou plusieurs pointeurs faisant référence au type. Peut-être même des variables d'environnement du programme P .

L'étymologie n'est pas vraiment importante pour la signification du programme, je recommande donc de ne pas trop s'en soucier.


1 commentaires

Juste une curiosité intellectuelle :)



2
votes

Dans Kernighan et Ritchie, Le langage de programmation C , 1978, argv est affiché dans l'index, à la page 221, comme:

argv argument vecteur 110

Le texte des pages 110-114 ne contient aucune autre indication sur la dérivation de argc ou argv , autre que leur sémantique. envp n'apparaît pas dans l'index.

Dans la deuxième édition, 1988, le texte de la section correspondante, à la page 114, dit:

… deux arguments. Le premier (appelé conventionnellement argc , pour le nombre d'arguments) est le nombre d'arguments de ligne de commande avec lesquels le programme a été appelé; le second ( argv , pour le vecteur d'argument) est…

Encore une fois dans la deuxième édition, envp n'apparaît pas dans l'index.

La spécification Unix, IEEE Std 1003.1-2008, 2016, The Open Group Base Specifications Issue 7 , indique dans la section environ , execl , et les routines associées:

Certaines implémentations fournissent un troisième argument à main () appelé envp. Ceci est défini comme un pointeur vers l'environnement.

Ceci est cohérent avec envp qui signifie env ironment p ointer.


1 commentaires

Intéressant! Je n'ai que la première version, où vecteur n'apparaît que dans l'index. Pour info, l'utilisation d'envp est beaucoup plus ancienne, puisque j'en ai déjà trouvé une mention comme pointeur vers un tableau de pointeurs de caractères qui sont l'environnement de l'exécution programme dans le livre de Maurice Bach de 1986 La conception du système d'exploitation UNIX®