__FILE__宏显示完整路径

217
标准预定义宏__FILE__在C语言中显示文件的完整路径。有没有办法缩短路径并只获取文件名?我的意思是,不要显示完整路径,只显示文件名。
/full/path/to/file.c

我明白了。
to/file.c

或者

file.c

34
希望找到一个仅使用预处理器的解决方案将非常好。我担心基于字符串操作的建议将在运行时执行。 - cdleonard
9
因为你正在使用gcc,所以我认为你可以通过更改传递给命令行的文件名来改变__FILE__的内容。因此,不要使用gcc /full/path/to/file.c,而是尝试cd /full/path/to; gcc file.c; cd -;。当然,如果你依赖于gcc的当前目录来设置包含路径或输出文件位置,则需要更多的修改。编辑:gcc文档表明它是完整路径,而不是输入文件名参数,但在Cygwin上的gcc 4.5.3中,我看到的并非如此。因此,你可以在Linux上尝试一下。 - Steve Jessop
4
GCC 4.5.1(专为arm-none-eabi构建)在其命令行上使用文件名的确切文本。在我的情况下,这是IDE的问题,因为它以所有文件名都被完全限定的方式调用GCC,而不是将当前目录放在某个合理的位置(例如项目文件的位置?)或可配置并从那里使用相对路径。我怀疑很多IDE都会这样做(尤其是在Windows上),出于某种与解释“当前”目录在GUI应用程序中真正位置有关的不适感。 - RBerteig
3
@SteveJessop - 希望您能看到这条评论。 我遇到了一种情况,其中__FILE__被打印为../../../../../../../../rtems/c/src/lib/libbsp/sparc/leon2/../../shared/bootcard.c,我想知道gcc编译文件的位置,以便该文件相对于所示的位置定位。 - Chan Kim
2
这个问题并不是与链接中的问题重复。首先,链接中的问题是关于C++的,因此答案涉及到了C++宏奥秘。其次,在OP的问题中没有强制要求使用宏解决方案。它只是郑重指出一个问题,并提出了一个开放式问题。 - Prof. Falken
显示剩余4条评论
31个回答

0
这个解决方案基于@RenatoUtsch的答案:
CMake列表:
string(LENGTH "${PROJECT_SOURCE_DIR}/" SOURCE_PATH_SIZE)
add_definitions("-DSOURCE_PATH_SIZE=${SOURCE_PATH_SIZE}")
add_definitions("-DSOURCE_PATH=\"${PROJECT_SOURCE_DIR}\"")

C/C++ 头文件

#define __FILENAME__ strstr(__FILE__, SOURCE_PATH) + SOURCE_PATH_SIZE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接