如果我在下面这样做:
#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)
只打印文件名,我认为它应该用完整的路径打印出来,谷歌搜索告诉我人们要求帮助才能获得文件名?
答案 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
选项将预处理器令牌定义为您需要的内容。