我想使用C程序显示当前的C文件。我知道argv[0]
可以获取可执行文件的名称。但我希望文件名为'hello.c'
。有可能吗?
答案 0 :(得分:15)
单个程序可以由几个 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
另见:
答案 1 :(得分:1)
如果您使用的是Windows,并且对您的程序具有".exe"
扩展名,请将该扩展程序替换为".c"
。如果您使用的是Linux或OSX,则只需附加".c"
,但不要直接附加到argv[0]
,因为该字符串不会为其分配空间。改为创建一个新字符串。
然而,这在所有情况下都不起作用,因为实际的源文件和可执行文件当然可以通过不同的命名,并且可执行文件甚至可能与源文件不在同一文件夹中。可以使用__FILE__
宏来获取源文件的实际名称。如果您使用的是VisualC ++,那么您可以向编译器添加一个标志,告诉它在__FILE__
宏中使用完整路径,请参阅this MSDN reference。 GCC预处理器已在__FILE__
中拥有完整路径,请参阅the documentation。