【发布时间】:2012-12-03 15:29:03
【问题描述】:
我想使用 C 程序显示我当前的 C 文件。我知道可以通过argv[0]获取可执行文件名。但我希望文件名为 'hello.c' 例如。有可能吗?
【问题讨论】:
-
无论源代码所在的
.c如何,您都可以随意命名可执行文件。
我想使用 C 程序显示我当前的 C 文件。我知道可以通过argv[0]获取可执行文件名。但我希望文件名为 'hello.c' 例如。有可能吗?
【问题讨论】:
.c如何,您都可以随意命名可执行文件。
一个程序可以由几个 C 文件组成。那你要找哪一个?
__FILE__ 宏就是为此而制作的。它被预处理器替换为当前正在编译的源 (.C) 文件的名称。
main.c
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Executable name: %s\n", argv[0]);
printf("This is %s() from %s, line %d\n",
__FUNCTION__, __FILE__, __LINE__);
one();
return 0;
}
one.c
#include <stdio.h>
void one(void)
{
printf("This is %s() from %s, line %d\n",
__FUNCTION__, __FILE__, __LINE__);
}
输出(假设可执行文件名为“hello.exe”):
Executable name: hello.exe
This is main() from main.c, line 4
This is one() from one.c, line 3
另见:
【讨论】:
__FILE__?没有。同样,这些宏由 预处理器 定义(在实际编译器之前运行)。它们不是由任何头文件定义的。
FILE - 你的意思是__FILE__ 有两个前导和尾随下划线吗?我知道你在linux上。你用的是什么编译器?海合会?
如果您使用的是 Windows,并且您的程序具有 ".exe" 扩展名,则将该扩展名替换为 ".c"。如果您使用的是 Linux 或 OSX,则只需附加 ".c",但不要直接附加到 argv[0],因为该字符串不会为此分配空间。而是创建一个新字符串。
然而,这并不适用于所有情况,因为实际的源文件和可执行文件当然可能有不同的命名,而且可执行文件甚至可能与源文件不在同一个文件夹中。可以使用__FILE__ 宏来获取源文件的实际名称。如果您使用的是 VisualC++,那么您可以向编译器添加一个标志,告诉它在 __FILE__ 宏中使用完整路径,请参阅 this MSDN reference。 GCC 预处理器已经在__FILE__ 中拥有完整路径,请参阅the documentation。
【讨论】:
gcc myprogram.c -o differentname --> "differentname.c" 我不明白为什么建议这是个好主意。
__FILE__。并且不需要头文件,它是在编译器正确之前处理源代码的预处理器的一部分。另请参阅我的第二个链接,了解您可以使用的其他宏。