Отключить предупреждение об ошибке


есть ли способ отключить только одну строку предупреждения в файле cpp с помощью visual studio?

#pragma warning (disable : 4101) в верхней части файла, но это, очевидно, просто выключает его для всего блока.
9 76

9 ответов:

#pragma warning( push )
#pragma warning( disable : 4101)
// Your function
#pragma warning( pop ) 

Если вы хотите подавить предупреждение только в одной строке кода, Вы можете использовать suppressпредупреждение описатель:

#pragma warning(suppress: 4101)
// here goes your single line of code where the warning occurs

для одной строки кода, это работает так же, как написать следующее:

#pragma warning(push)
#pragma warning(disable: 4101)
// here goes your code where the warning occurs
#pragma warning(pop)

#pragma push/pop часто являются решением для такого рода проблем, но в этом случае почему бы вам просто не удалить непереведенную переменную?

try
{
    // ...
}
catch(const your_exception_type &) // type specified but no variable declared
{
    // ...
}

использовать #pragma warning ( push ), потом #pragma warning ( disable ), затем поместите свой код, а затем используйте #pragma warning ( pop ) как рассказали здесь:

#pragma warning( push )
#pragma warning( disable : WarningCode)
// code with warning
#pragma warning( pop ) 

вместо того, чтобы поместить его поверх файла (или даже файла заголовка), просто оберните соответствующий код с помощью #pragma warning (push),#pragma warning (disable) и #pragma warning (pop), как показано здесь.

хотя есть и другие варианты, в том числе #pramga warning (once).

можно использовать UNREFERENCED_PARAMETER определена в WinNT.H. Определение просто:

#define UNREFERENCED_PARAMETER(P)          (P)

и использовать его как:

void OnMessage(WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(wParam);
    UNREFERENCED_PARAMETER(lParam);
}

почему бы вам использовать его, вы можете утверждать, что вы можете просто опустить само имя переменной. Ну, есть случаи (разные конфигурации проекта, сборки отладки/выпуска), где переменная может быть фактически использована. В другой конфигурации эта переменная не используется (и, следовательно, предупреждение).

некоторые статические анализ кода все еще может дать предупреждение для этого несущественного утверждения (wParam;). В этом случае вы можете использовать DBG_UNREFERENCED_PARAMETER что же UNREFERENCED_PARAMETER в отладке строит, и делает P=P в Release-сборке.

#define DBG_UNREFERENCED_PARAMETER(P)      (P) = (P)

в определенных ситуациях вы должны есть именованный параметр, но вы не используете его напрямую.
Например, я столкнулся с ним на VS2010, когда 'e' используется только внутри a decltype оператор, компилятор жалуется, но вы должны иметь имя varible e.

все выше не#pragma предложения все сводятся к простому добавлению одного утверждения:

bool f(int e)
{ 
   // code not using e
   return true;
   e; // use without doing anything
}

Если вы хотите отключить unreferenced local variable написать в какой-заголовок

template<class T>
void ignore (const T & ) {}

и использовать

catch(const Except & excpt) {
    ignore(excpt); // No warning
    // ...  
} 

пример:

#pragma warning(suppress:0000)  // (suppress one error in the next line)

эта ПРАГМА допустима для C++ начиная с Visual Studio 2005.
https://msdn.microsoft.com/en-us/library/2c8f766e(v=vs. 80).aspx

ПРАГМА не является допустимым для C# через Visual Studio 2005 через Visual Studio 2015.
Ошибка:"ожидаемое отключение или восстановление".
(Я думаю, они никогда не добирались до реализации suppress ...)
https://msdn.microsoft.com/en-us/library/441722ys(v=vs. 140).aspx

C# нужен другой формат. Это будет выглядеть так (но не работает):

#pragma warning suppress 0642  // (suppress one error in the next line)

вместо suppress вы должны disable и enable:

if (condition)
#pragma warning disable 0642
    ;  // Empty statement HERE provokes Warning: "Possible mistaken empty statement" (CS0642)
#pragma warning restore 0642
else

это так некрасиво, я думаю, что умнее просто изменить стиль:

if (condition)
{
    // Do nothing (because blah blah blah).
}
else