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

如何获取C/C++翻译单元名称而非当前解析的头文件名?

(注:我已查看论坛中数个类似问题,但它们本质不同,比如获取目标文件名等,因此本文并非重复提问。)

我长期使用__FILE__宏记录错误位置。

我修改了日志模块,让头文件定义一个文件作用域结构体,其中包含该宏及其他数据。(在头文件中定义存储是非常奇怪的,在我多年的C/C++职业生涯中从未这样做过。)

但我惊讶地发现,__FILE__现在展开为头文件名,而非源文件名。

我有多种技术变通方案,但有没有一种现代方法(即使不可移植)能在gcc、clang或Visual Studio中,让预处理器获取正在编译的源文件名?

目前我能想到的选项都不尽如人意:

  • 要求日志库用户在make命令中添加-DFILE_NAME=$<(我不确定在Visual Studio中如何操作,但应该能找到方法。)
  • 要求日志库用户在代码中手动定义该对象,使其使用正确的__FILE__进行初始化
  • 放弃在该结构体中存储文件名,沿用旧方法

内容的提问来源于stack exchange,提问作者Swiss Frank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:55:26