【问题标题】:Intellisense error when using `__FUNCTIONW__`使用 `__FUNCTIONW__` 时出现 Intellisense 错误
【发布时间】: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 是一个自定义异常类,其构造函数接受两个整数参数,然后是五个简单的宽字符串来定位和描述引发它的错误。

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

错误:标识符 L__FUNCTION__ 未定义。

...这很奇怪!

这变得更加陌生的地方是;程序本身 - 尽管有这个错误警告 - 编译愉快,甚至按预期运行。据说有争议的宏毫无怨言地创建了它的宽字符函数名扩展。

所以这显然是 Intellisense 的问题,而不是代码或标头。你们有谁知道可能出了什么问题吗?

这可能是之前最接近的问题:

Why would __FUNCTION__ be undefined?

但是,与 Ben Voight 不同,我发现该程序确实链接并运行!问题出在 Intellisense 上。

【问题讨论】:

  • 这是a known bug
  • 将其添加为@Hans Passant 的答案,我会勾选它!您提供的链接似乎是确定的!

标签: visual-c++ macros intellisense


【解决方案1】:

此错误已向Microsoft 公开。

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

您现在应该可以忽略错误。

另外this 可能会让您对我的意思有所了解。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 2021-06-18
      • 2014-05-30
      • 2019-05-17
      • 1970-01-01
      相关资源
      最近更新 更多