0

我只需要__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__ ) 

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

我错过了什么?谢谢

4

2 回答 2

2

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

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

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

如果__FILE__format展开为字符串文字,则 4 个字符串将被粘贴在一起。"A" "B" "C" "D"是一样的"ABCD"

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

于 2014-12-15T22:11:18.083 回答
1

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

__BASE_FILE__

这是一个有用的列表

于 2014-12-15T22:09:46.980 回答