gcc cfilename.c >./a.out -6ren">
gpt4 book ai didi

c - __FILE__ 没有给出完整路径

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:31 25 4
gpt4 key购买 nike

如果我在下面这样做:

#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)

只打印文件名,我认为它应该打印完整路径,谷歌搜索告诉我寻求帮助的人只获取文件名?

最佳答案

ISO C 标准(当前为 C11)对 __FILE__ 预定义宏的内容有如下说明:

__FILE__: The presumed name of the current source file (a character string literal).

仅此而已。内容的格式没有强制要求,所以我怀疑一个实现可能会通过将其设置为 “我在/src 树中找到的某个文件” 而仍然声称符合性。

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

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

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

#include "myheader.h"

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


如果您有一个没有以您需要的方式设置__FILE__ 的实现,没有什么能阻止您创建自己的像这样的东西:

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

(其中 dodgycc 编译器的 -D 选项定义了一个预处理器标记作为您所需要的)。

关于c - __FILE__ 没有给出完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21818666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com