__FILE__的基本文件名

base file name from __FILE__

本文关键字:文件名 FILE      更新时间:2023-10-16

我只需要文件名,只有__FILE__宏和__FILEW__宏返回整个路径的地方。

我定义了以下内容:

#define __FILE_NAME_ONLY__ (strrchr(__FILE__, '') ? strrchr(__FILE__, '') + 1 : __FILE__)

我按如下方式使用它:

#define MY_TRACE( mask, format, ... )              
            GlobalTrace( mask, L"-[" __FILE_NAME_ONLY__ L":" format , __VA_ARGS__ ) 

我收到以下错误:

错误 C2064:术语的计算结果不等于采用 1 个参数的函数

当我尝试以下宏时:

#define __WIDE(_String) L ## _String
#define _WIDE(_String) __WIDE(_String) 

如下

 #define MY_TRACE( mask, format, ... )              
                GlobalTrace( mask, L"-[" _WIDE(__FILE_NAME_ONLY__) L":" format , __VA_ARGS__ ) 

我得到:错误 C2146:语法错误:当我实际尝试使用 MY_TRACE 宏时,标识符"L"之前缺少")"

我错过了什么?谢谢

您依赖于字符串文本连接,除了所有术语都不是字符串文本。

我假设您以前是这样做的:

#define MY_TRACE( mask, format, ... )              
            GlobalTrace( mask, L"-[" __FILE__ L":" format , __VA_ARGS__ ) 

如果__FILE__format扩展为字符串文本,则 4 个字符串将粘贴为一个字符串。 "A" "B" "C" "D""ABCD" 相同。

当您替换为__FILE_NAME_ONLY__时,不会发生这种情况,因为它扩展到函数调用,而不是文字。

如果您使用的是 gcc,此宏应该会有所帮助:

__BASE_FILE__

这是一个有用的列表