__FILE__没有给出完整的路径

时间:2014-02-17 00:16:15

标签: c

如果我在下面这样做:

#include <stdio.h>

int main()
{

 printf ("%s\n",__FILE__);
 return 0;

}

>gcc cfilename.c
>./a.out
>cfilename.c
>pwd
>/home/tek/cpp
> gcc -v
> gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

只打印文件名,我认为它应该用完整的路径打印出来,谷歌搜索告诉我人们要求帮助才能获得文件名?

1 个答案:

答案 0 :(得分:4)

ISO C标准(目前为C11)可以说明__FILE__预定义宏的内容:

  

__FILE__:当前源文件的假定名称(字符串文字)。

就是这样。对内容的格式没有任何授权,所以我怀疑实现可能会因为将其设置为"some file I found in the /src tree"而仍然声称符合性。

所以它基本上取决于它在那里放置的内容。您需要调查特定的实现以了解它们如何处理它。例如,gcc编译器完全按照您在命令行中指定的方式使用该文件,因此,如果您需要完整路径,则必须更改命令行,如:

gcc -o myexec $(pwd)/myexec.c

有趣的是,gcc似乎对所包含的文件执行相反的。当你使用:

#include "myheader.h"

__FILE__宏设置为头文件的完全扩展。


如果您的实现没有以您需要的方式设置__FILE__,那么就没有什么能阻止您创建自己的,例如:

dodgycc -o myexec -DMY_FILE_NAME=$(pwd)/myexec.c myexec.c

-D编译器的dodgycc选项将预处理器令牌定义为您需要的内容。