来自__FILE__的基本文件名

时间:2014-12-15 21:59:48

标签: c++ windows macros predefined-macro

我只需要__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:语法错误:丢失')'在标识符' L' 之前我实际尝试使用MY_TRACE宏

我错过了什么?感谢

2 个答案:

答案 0 :(得分: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__替换时不会发生这种情况,因为它会扩展为函数调用,而不是文字。

答案 1 :(得分:0)

如果你正在使用gcc这个宏应该有帮助:

__BASE_FILE__

这是一个有用的list

相关问题