我只需要__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宏
我错过了什么?感谢答案 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)