我有一个带有 Windows 运行时组件项目的 Windows Phone 8 解决方案。在 WinRT 代码中,我想使用 __FUNCTION__
从 C++ 类进行日志记录。
但是,__FUNCTION__
未定义,而 __LINE__
是。
Intellisense 只建议使用 __FUNCTIONW__
。但是当我跳转到 crtdefs.h
中 __FUNCTIONW__
的定义时,我可以看到 __FUNCTION__
也没有在那里定义:
我已阅读 Why would __FUNCTION__ be undefined?但这对我没有帮助(或者我没有正确理解那里描述的问题)
__FUNCTION__
怎么可能没有被定义?我认为它内置于编译器中...
更新:
好的,我了解到 __FUNCTION__
实际上从来没有着色。但是当我输入时出现错误:
TCHAR* f = _T(__FUNCTION__);
它说:
Error: Identifier "L__FUNCTION__" is undefined
也许我的 UNICODE 设置有问题?我需要包含一个特殊的 header 吗?
最佳答案
当我在 C++ Phone 8 应用程序中尝试时,它工作正常。请注意,您可能会对未出现在 IntelliSense 自动完成列表中的 __FUNCTION__
感到困惑。您只能看到 __FUNCTIONW__
。这是一个缺陷,宏是predefined in the compiler但 IS 解析器忽略了这一点。由于宏的定义没有出现在包含的 header 中的任何地方,解析器将永远看不到它的定义(就像它对 __FUNCTIONW__
所做的那样)并且你会看到它从列表。
我无法确认这是否是一个已知错误,connect.microsoft.com 上的搜索功能不够好,无法过滤与“功能”匹配的 6600 个匹配项。如果您愿意,可以提交错误。
编辑后更新:您在代码中使用了古老的 TCHAR 宏。有一个获取正确宏的技巧,但我不打算记录它。 10 多年前,当每个人都停止创建仍可在旧版 Windows 9x 版本之一上运行的程序时,这一切就不再相关了。在手机上当然毫无意义。
您实际上想要使用__FUNCTIONW__
(没有_T
),它会为函数名称生成Unicode 字符串。它是一个 const wchar_t*。
关于c++ - WinRT __FUNCTION__ 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24041868/