WinRT __FUNCTION__未定义

时间:2014-06-04 15:43:12

标签: c++ windows-runtime

我有一个带有Windows运行时组件项目的Windows Phone 8解决方案。在WinRT代码中,我想使用__FUNCTION__从C ++类进行日志记录。 但是,__FUNCTION__未定义,__LINE__为。

Intellisense仅建议__FUNCTIONW__使用。但是,当我跳到__FUNCTIONW__crtdefs.h的定义时,我可以看到__FUNCTION__未定义在那里:

definition of __FUNCTIONW__ in crtdefs.h

我已阅读Why would __FUNCTION__ be undefined?但这对我没有帮助(或者我没有理解正确描述的问题)

如何定义__FUNCTION__?我认为它是内置于编译器...


更新

好的,我了解到__FUNCTION__实际上从未着色过。但是当我输入时我收到错误:

TCHAR* f = _T(__FUNCTION__);

它说:

Error: Identifier "L__FUNCTION__" is undefined

我的UNICODE设置可能有问题吗?我需要包含一个特殊的标题吗?

1 个答案:

答案 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 *。