C程序找到当前文件名

时间:2012-12-16 05:20:54

标签: c file

我想使用C程序显示当前的C文件。我知道argv[0]可以获取可执行文件的名称。但我希望文件名为'hello.c'。有可能吗?

2 个答案:

答案 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