J'utilise habituellement argv[0]
ou basename(argv[0])
si possible. À partir du POV de l'utilisateur, je pense que s'ils renomment ou exécutent un exécutable (ou que quelqu'un d'autre le fait pour eux), alors ils veulent que les messages apparaissent sous le nom qu'ils utilisent, et pas sous un autre nom. qu'ils peuvent ou ne peuvent pas savoir. De même, si vous découvrez à l'avenir que vous voulez compiler votre programme sous des noms différents avec des options différentes, vous voulez envelopper #ifndef
autour de #define
et assurez-vous qu'il est défini via la ligne de commande du compilateur : -DPROGRAM_NAME=myprog_demo
, ou voulez-vous juste le faire et ça marche? L'exception pourrait être que si vos instructions d'utilisation sont extraites d'une page de manuel ou d'une autre documentation, alors vous voudrez peut-être connecter le nom du programme à cela. Mais alors vous n'utiliserez probablement pas le #define
non plus.
Les implémentations ne doivent pas nécessairement fournir argv[0]
, donc, pour les meilleures pratiques portables, gérer également ce cas. Là encore, si votre système ne le fournit pas, il est probable que l'utilisateur ne verra pas non plus les messages sur n'importe quel terminal.
Soit dit en passant:
#define PROGRAM_NAME "myprog"
puts("this is " PROGRAM_NAME);
Si vous voulez une constante, utilisez une constante (c'est-à-dire au niveau global, 'const char * const PROGRAM_NAME =" myprog ";'). Cela garantira que la chaîne n'est stockée qu'une seule fois en mémoire. – mk12