normalmente utilizo argv[0]
o basename(argv[0])
si es posible. Desde el punto de vista del usuario, creo que si renombran o enlazan un ejecutable (o alguien más hace eso por ellos), entonces quieren que aparezcan mensajes con el nombre que están usando, no con otro nombre que fue compilado como, que ellos pueden o no conocer.
Del mismo modo, si se descubre en el futuro que se desea compilar su programa bajo diferentes nombres con diferentes opciones, para dar diferentes versiones, ¿quiere envolver un #ifndef
alrededor de ese #define
y asegúrese de que está definido a través de la línea de comandos del compilador : -DPROGRAM_NAME=myprog_demo
, ¿o solo quieres hacerlo y funciona?
La excepción podría ser que si sus instrucciones de uso son un extracto de una página de manual u otra documentación, entonces posiblemente quiera cablear el nombre del programa en eso. Pero entonces probablemente tampoco usaría el #define
.
implementaciones no necesitan proporcionar argv[0]
, sin embargo, por lo que para las mejores prácticas portátiles gestionar el caso también. Por otra parte, si su sistema no lo proporciona, probablemente el usuario tampoco vaya a ver mensajes en ningún tipo de terminal.
Por cierto:
#define PROGRAM_NAME "myprog"
puts("this is " PROGRAM_NAME);
Si desea una constante, utilizar una constante (es decir, a nivel mundial, 'const char * const PROGRAM_NAME = "miprog";'). Al hacerlo, se asegurará de que la cadena solo se almacene una vez en la memoria. – mk12