Это довольно незначительный вопрос, но он меня раздражает: 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
(в котором используется аналогичная конструкция) подчеркивается IntelliSense, и при наведении курсора на любое чтение "Ошибка: класс хранения может не быть уточненным здесь. Построение проекта не дает ошибок, связанных с этими строками.