【发布时间】:2014-11-04 21:43:24
【问题描述】:
我正在使用__LINE__、__FILEW__ 和__FUNCTIONW__ 宏来帮助编写和实现自定义异常类。众所周知,它们会自动提供代码中调用它们的位置的行号、源文件名和函数名。此外,由于我只使用 Unicode,我必须使用扩展为字符串结果的 ...W 宽字符版本。
例如:
throw CEString(CEString::ERROR_INDEX_OUT_OF_BOUNDS,
__LINE__,
L"End index is smaller than start index",
L"Index Out of Bounds",
__FILEW__,
__FUNCTIONW__,
L"CString");
其中CEString 是一个自定义异常类,其构造函数接受两个整数参数,然后是五个简单的宽字符串来定位和描述引发它的错误。
我已正确包含头文件iostream、new 和crtdefs.h。从文档来看,后者不应该是绝对必要的,但是因为它是实际定义宏的地方,所以无论如何我已经包含了它。但是,VS2013 中的 Intellisense 错误检查器将我对 __FUNCTIONW__ 宏的使用突出显示为错误。它返回以下通知:
错误:标识符 L__FUNCTION__ 未定义。
...这很奇怪!
这变得更加陌生的地方是;程序本身 - 尽管有这个错误警告 - 编译愉快,甚至按预期运行。据说有争议的宏毫无怨言地创建了它的宽字符函数名扩展。
所以这显然是 Intellisense 的问题,而不是代码或标头。你们有谁知道可能出了什么问题吗?
这可能是之前最接近的问题:
Why would __FUNCTION__ be undefined?
但是,与 Ben Voight 不同,我发现该程序确实链接并运行!问题出在 Intellisense 上。
【问题讨论】:
-
这是a known bug。
-
将其添加为@Hans Passant 的答案,我会勾选它!您提供的链接似乎是确定的!
标签: visual-c++ macros intellisense