我有一个带有Windows运行时组件项目的Windows Phone 8解决方案。在WinRT代码中,我想使用__FUNCTION__
从C ++类进行日志记录。
但是,__FUNCTION__
未定义,__LINE__
为。
Intellisense仅建议__FUNCTIONW__
使用。但是,当我跳到__FUNCTIONW__
中crtdefs.h
的定义时,我可以看到__FUNCTION__
未定义在那里:
我已阅读Why would __FUNCTION__ be undefined?但这对我没有帮助(或者我没有理解正确描述的问题)
如何定义__FUNCTION__
?我认为它是内置于编译器...
更新
好的,我了解到__FUNCTION__
实际上从未着色过。但是当我输入时我收到错误:
TCHAR* f = _T(__FUNCTION__);
它说:
Error: Identifier "L__FUNCTION__" is undefined
我的UNICODE设置可能有问题吗?我需要包含一个特殊的标题吗?
答案 0 :(得分:4)
当我在C ++ Phone 8应用程序中尝试它时,它工作正常。请注意,__FUNCTION__
未出现在IntelliSense自动完成列表中,可能会使您感到困惑。您只能看到__FUNCTIONW__
。这是一个缺陷,宏是predefined in the compiler但是IS解析器忽略了这一点。由于宏的定义并未出现在包含的标题中的任何位置,因此解析器无法看到它的定义(就像它对__FUNCTIONW__
所做的那样)并且您将看到它从列表中遗漏。
我无法确认这是否是一个已知错误,connect.microsoft.com上的搜索功能不足以过滤匹配"功能"的6600次点击。如果您愿意,可以提交错误。
编辑后更新:您在代码中使用了古老的TCHAR宏。获得正确的宏有一个技巧,但我不会记录它。 10年前,当所有人都停止创建仍可在其中一个旧版Windows 9x上运行的程序时,这一切都停止了相关性。当然在电话上毫无意义。
您实际上希望使用__FUNCTIONW__
(没有_T
),它会为函数名生成Unicode字符串。这是一个const wchar_t *。