在C中引用程序名称时的最佳实践

gue*_*est 8 c c-preprocessor

在提到程序名称时,最佳做法是什么?我见过:

#define PROGRAM_NAME "myprog"
printf("this is %s\n", PROGRAM_NAME);
Run Code Online (Sandbox Code Playgroud)

以及:

printf("this is %s\n", argv[0]);
Run Code Online (Sandbox Code Playgroud)

我知道,第二种方法将给予我,./myprog而不是myprog在没有调用程序时$PATH,第一种方法将保证程序名称的一致性.

但还有什么能让一种方法优于另一种吗?

MJB*_*MJB 5

当您有多个链接时,第二种方法更优越.在*nix系统中,有时行为取决于您如何调用程序.如此难以编写程序名称显然是一个问题 - 它永远无法检查.

  • 另一个例子是*vi*和*view*,它是*vi*的只读版本,但它是完全相同的代码和完全相同的可执行文件.调用它*view*只是以只读方式打开文件. (2认同)

use*_*594 5

我试图充分利用这两个方面:

char const * program_name;

int main(int argc, char **argv) {
   program_name = argv[0];
   //...
}
Run Code Online (Sandbox Code Playgroud)

如果您需要program_name在其他文件中可用,您可以这样声明:

extern char const * program_name;
Run Code Online (Sandbox Code Playgroud)

我声明"char const*"因为我希望它是一个指向const数据的指针.我不确定我是否做对了.