VS 2010 C ++ IntelliSense即使可以,“此处未指定存储类”?

问题描述

| 这是一个相当小的问题,但是让我很烦:IntelliSense似乎深信在“ 0”条件下在函数作用域中声明静态变量是一个错误,并对此有所抱怨。只有它可以构建良好,甚至MSDN文档都将其称为合法用法。我真的想摆脱波浪形的红线,因为它经常出现(我经常使用的宏中使用了它)。 这是示例代码,尽管它不是我程序中的唯一示例:
MyForm::MyForm()
{
    _VMESSAGE(\"Constructing \'%s\'/%p:%p @ <%p>\",GetEditorID(),GetFormType(),formID,this);
    if (static bool runonce = true)
    {
        // patch up vtbl    
        memaddr thisvtbl = (UInt32)memaddr::GetobjectVtbl(this);
        _MESSAGE(\"Patching MyForm Form vtbl @ <%p>\",thisvtbl);
        gLog.Indent();
        for (int i = 0; i < sizeof(Form_NoUseMethods)*0x8; i++)
        {
            if ((Form_NoUseMethods[i/0x20] >> (i%0x20)) & 1)
            {
                thisvtbl.SetVtblEntry(i*4,TESForm_vtbl.GetVtblEntry(i*4));
                _VMESSAGE(\"Patched Offset 0x%04X\",i*4);
            }
        }
        gLog.Outdent();

        runonce  =  false;
    }
}
if ( static bool runonce = true )
行中的ѭ2and和usage4ѭ或every5ѭ的每种用法(都使用类似的构造)都由IntelliSense加上下划线,并将鼠标悬停在任何读取上\“错误:此处未指定存储类。\”构建项目会产生结果没有与这些行有关的错误。     

解决方法

        VC ++编译器允许将此作为​​静默扩展(它不是合法的C ++),但是VC ++ IntelliSense引擎基于EDG编译器前端,而不是VC ++编译器(如图)。因此,如果您担心编写可移植的代码,则IntelliSense错误是正确的。     ,        等等-您是说以下代码在MSVC中编译并运行吗?
int main() {
  if (static bool runonce = true) return 0 ;
}
那是我的新事物。 g ++当然不接受它。 顺便说一句,在您的问题中,您提到“在函数作用域中声明静态变量”,这不是问题:
int main() {
  static bool runonce = true ;
  if (runonce) return 0 ;
}