c++ - WinRT __FUNCTION__ 未定义

标签 c++ windows-runtime

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

Intellisense 只建议使用 __FUNCTIONW__。但是当我跳转到 crtdefs.h__FUNCTIONW__ 的定义时,我可以看到 __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 设置有问题?我需要包含一个特殊的 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/

相关文章:

python - 从 C++ 发出运行 python 脚本

c++ - int * 和 enum * 之间如何转换?

c++ - vector const_iterator 如何越过 vector end?

javascript - 使用 WinJS.UI.ListView,如何在 snapview 中禁用点击动画

c# - WinRT中UIElement的绝对坐标

c++ - 如何创建文件路径可以像磁盘一样访问的虚拟文件系统

c++ - FW1FontWrapper IFW1ColorRGBA

c# - 如何从我的 Windows 应用商店应用程序项目中的 Assets 文件夹中获取文件?

c# - 如何在 Metro 应用中调试共享合约?

c# - 如何将文件从本地存储传递到 Windows Phone 8.1 中的库?