我想使用 C 程序显示我当前的 C 文件。我知道可执行文件名可以通过argv[0]
. 但我想要文件名作为'hello.c'
例子。是否可以?
问问题
15768 次
2 回答
17
一个程序可以由多个C 文件组成。那么你在找哪一个?
__FILE__
为此制作了宏。它被预处理器替换为正在编译的当前源 (.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;
}
一.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
也可以看看:
于 2012-12-16T05:29:37.740 回答
1
如果您使用的是 Windows,并且".exe"
您的程序具有扩展名,则将该扩展名替换为".c"
. 如果您在 Linux 或 OSX 上,则只需 append ".c"
,但不要直接附加到,argv[0]
因为该字符串不会为此分配空间。而是创建一个新字符串。
然而,这并不适用于所有情况,因为实际的源文件和可执行文件当然可能以不同的名称命名,并且可执行文件甚至可能与源文件不在同一个文件夹中。__FILE__
可以使用宏来获取源文件的实际名称。如果您使用的是 VisualC++,那么您可以向编译器添加一个标志,告诉它在__FILE__
宏中使用完整路径,请参阅此 MSDN 参考。GCC 预处理器已经有完整的路径__FILE__
,请参阅文档。
于 2012-12-16T05:24:09.013 回答