5

我想使用 C 程序显示我当前的 C 文件。我知道可执行文件名可以通过argv[0]. 但我想要文件名作为'hello.c'例子。是否可以?

4

2 回答 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 回答