如何获取C/C++翻译单元名称而非当前解析的头文件名?
(注:我已查看论坛中数个类似问题,但它们本质不同,比如获取目标文件名等,因此本文并非重复提问。)
我长期使用__FILE__宏记录错误位置。
我修改了日志模块,让头文件定义一个文件作用域结构体,其中包含该宏及其他数据。(在头文件中定义存储是非常奇怪的,在我多年的C/C++职业生涯中从未这样做过。)
但我惊讶地发现,__FILE__现在展开为头文件名,而非源文件名。
我有多种技术变通方案,但有没有一种现代方法(即使不可移植)能在gcc、clang或Visual Studio中,让预处理器获取正在编译的源文件名?
目前我能想到的选项都不尽如人意:
- 要求日志库用户在make命令中添加
-DFILE_NAME=$<(我不确定在Visual Studio中如何操作,但应该能找到方法。) - 要求日志库用户在代码中手动定义该对象,使其使用正确的
__FILE__进行初始化 - 放弃在该结构体中存储文件名,沿用旧方法
内容的提问来源于stack exchange,提问作者Swiss Frank
相关产品推荐
相关产品推荐

