Я обычно использую argv[0]
или basename(argv[0])
, если это возможно.Я думаю, что из POV пользователя они переименовывают или жестко связывают исполняемый файл (или кто-то другой делает это для них), а затем хотят, чтобы сообщения от него появлялись под именем, которое они используют, а не под каким-либо другим именем, которое было скомпилировано как,о которых они могут знать или не знать.
Точно так же, если вы обнаружите в будущем, что хотите скомпилировать вашу программу под разными именами с разными опциями, чтобы дать разные версии, хотите ли вы обернуть #ifndef
вокругчто #define
и убедитесь, что он определен через командную строку компилятора: -DPROGRAM_NAME=myprog_demo
, или вы просто хотите сделать это, и это работает?
Исключением может быть то, что если ваши инструкции по использованию являются извлечениемиз man-страницы или другой документации, возможно, вы захотите встроить в нее имя программы.Но тогда вы, вероятно, тоже не будете использовать #define
.
Реализации не обязательно должны предоставлять argv[0]
, поэтому для лучших переносимых методов справьтесь и с этим случаем.Опять же, если ваша система не предоставляет его, то, вероятно, пользователь на самом деле не будет видеть сообщения ни на одном терминале.
Кстати:
#define PROGRAM_NAME "myprog"
puts("this is " PROGRAM_NAME);