这是一个相当小的问题,但它让我烦恼:IntelliSense似乎确信在条件中声明函数范围内的静态变量if是一个错误,并抱怨它.只有它构建得很好,甚至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;
    }
}
无论是static在if ( static bool runonce = true )线路和的每次使用_MESSAGE或_VMESSAGE(它使用了类似的构建体)是由智能感知下划线,和鼠标悬停在任何读取"错误:存储类可能不会在这里指定" 构建项目不会产生与这些线路相关的错误.