使用`__FUNCTIONW__`时的智能感知错误

时间:2014-11-04 21:43:24

标签: visual-c++ macros intellisense

我正在使用__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是一个自定义异常类,其构造函数接受两个整数参数,然后是五个简单的宽字符串,用于定位和描述抛出它的错误。

我正确包含了头文件iostreamnewcrtdefs.h。从文档中可以看出后者不应该是严格必要的,但是因为它实际上是宏的定义,所以无论如何我都包含了它。但是, VS2013 中的 Intellisense 错误检查会突出显示我对__FUNCTIONW__宏的使用是错误的。它返回以下通知:

错误:标识符L__FUNCTION__未定义。

......这很奇怪!

这变得更加陌生;程序本身 - 尽管出现此错误警告 - 可以快速编译,甚至可以按预期运行。这个有争议的宏可以毫无怨言地创建其广泛的功能名称扩展。

所以这显然是 Intellisense 的问题,而不是代码或标题。你们中的任何一个人都知道会出现什么问题吗?

这可能是最接近的上一个问题:

Why would __FUNCTION__ be undefined?

然而,与Ben Voight不同,我发现程序确实链接并运行!智能感知是明确的问题。

2 个答案:

答案 0 :(得分:2)

此错误已公开给Microsoft

即使在VS2010(自定义或内置)中,Intellisense似乎也存在宏问题

你现在应该可以忽略错误了。

同样this可能会让你对我的意思有所了解。

答案 1 :(得分:1)

作为一种解决方法,您只需定义以下内容(最好在您的PCH标题中)......

#if (_MSC_VER >= 1800 && _MSC_VER <= 1899)
#define L__FUNCTION__ nullptr
#define L__FILE__     nullptr
#endif

这是一个无用的定义,但它阻止IntelliSense报告“ undefined ”扩展。