You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中需仅获取文件名,是否有替代__FILE__的内置宏?

C++中获取仅文件名的方案

核心结论

目前没有任何版本的C++标准(从C98到C23)提供直接返回仅文件名的内置宏,必须依赖编译器扩展或自行实现。

编译器非标准扩展方案

不同主流编译器提供了各自的非标准宏或编译选项来实现需求:

  • MSVC:内置__FILE_NAME__宏,直接返回不含路径的文件名。
  • GCC/Clang:
    • 可使用编译选项-fmacro-prefix-map=原路径=替换路径或-ffile-prefix-map=原路径=来剥离__FILE__中的路径前缀,比如编译时加上-ffile-prefix-map=$(pwd)=,就能让__FILE__只返回文件名。
    • 也可使用__BASE_FILE__宏,不过它返回的是预处理阶段的原始文件名,若存在头文件包含等情况,行为可能和预期有差异,需测试验证。

标准C++自行实现方案

如果需要跨编译器的标准实现,可以写一个编译期constexpr函数来从__FILE__中提取文件名:

#include <cstddef>

constexpr const char* get_filename(const char* path) {
    const char* filename = path;
    while (*path != '\0') {
        if (*path == '/' || *path == '\\') {
            filename = path + 1;
        }
        ++path;
    }
    return filename;
}

// 使用示例
#define LOG_FILENAME get_filename(__FILE__)

这个函数会在编译期遍历__FILE__字符串,找到最后一个路径分隔符(兼容Windows和Unix风格路径),返回其后的文件名部分,完全符合C++标准,跨编译器可用。


内容的提问来源于stack exchange,提问作者Samuel Wenker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:14:51