我正在使用__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不同,我发现程序确实链接并运行!智能感知是明确的问题。
答案 0 :(得分:2)
答案 1 :(得分:1)
作为一种解决方法,您只需定义以下内容(最好在您的PCH标题中)......
#if (_MSC_VER >= 1800 && _MSC_VER <= 1899)
#define L__FUNCTION__ nullptr
#define L__FILE__ nullptr
#endif
这是一个无用的定义,但它阻止IntelliSense报告“ undefined ”扩展。