C程序查找当前文件名

C程序查找当前文件名,c,file,C,File,我想用C程序显示我当前的C文件。我知道可执行文件名可以通过argv[0]获得。但我希望文件名为'hello.c',例如。有可能吗?如果您在Windows上,并且您的程序具有“.exe”扩展名,然后将该扩展名替换为”.c“。如果您使用的是Linux或OSX,那么只需追加“.c”,但不要直接追加到argv[0],因为该字符串不会为此分配空间。改为创建一个新字符串 然而,这并不适用于所有情况,因为实际的源文件和可执行文件的名称可能不同,而且可执行文件甚至可能与源文件不在同一文件夹中。获取源文件的实际名

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

如果您在Windows上,并且您的程序具有
“.exe”
扩展名,然后将该扩展名替换为
”.c“
。如果您使用的是Linux或OSX,那么只需追加
“.c”
,但不要直接追加到
argv[0]
,因为该字符串不会为此分配空间。改为创建一个新字符串


然而,这并不适用于所有情况,因为实际的源文件和可执行文件的名称可能不同,而且可执行文件甚至可能与源文件不在同一文件夹中。获取源文件的实际名称可以使用
\uuuu file\uuu
宏来完成。如果您使用的是VisualC++,则可以向编译器添加一个标志,告诉它在
\uuu文件\uuu
宏中使用完整路径,请参阅。GCC预处理器在
\uuuuu文件中已经有完整路径,请参阅。

单个程序可以由多个C文件组成。你在找哪一个

由于这个原因,创建了
\uuuu文件\uuuu
宏。它由预处理器替换为正在编译的当前源(.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;
}
#include <stdio.h>
void one(void)
{
    printf("This is %s() from %s, line %d\n",
        __FUNCTION__, __FILE__, __LINE__);
}
另见:


无论源代码所在的
.c
如何,您都可以随意命名可执行文件。假设可执行文件的名称与c源文件的名称相同。-1
gcc myprogram.c-o differentitname
-->“differentitname.c”我不明白为什么建议这样做是个好主意。是的,我有——但你的第一段胡乱假设,即使是OP也没有。@AlexeiLevenkov我应该用什么头文件作为文件,先生?我使用的是linux(C程序)。@Gomathi请注意下划线,它是
\uuu文件\uu
。而且不需要头文件,它是预处理器的一部分,在编译器正常运行之前处理源代码。另请参阅我的第二个链接,了解您可以使用的其他宏。先生,我应该使用什么头文件作为文件?我在linux上。你的意思是
\uuuuuu文件\uuuuu
?没有一个同样,这些宏是由预处理器(在实际编译器之前运行)定义的。它们不是由任何头文件定义的。但是,当我使用它时,它表示文件未声明。我是在linux上。再说一遍,你说的是
文件
-你是说
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?我知道你在linux上。你在用什么编译器?GCC?@JonathonReinhart-回答得很好。作为一个旁白printf(“这是来自%s的%s(),第%d\n行”,函数、文件、行)会产生大量运行时错误消息。毫无疑问,失败的是什么,失败在哪里。