Отключить предупреждение об ошибке
есть ли способ отключить только одну строку предупреждения в файле cpp с помощью visual studio?
#pragma warning (disable : 4101) в верхней части файла, но это, очевидно, просто выключает его для всего блока.9 ответов:
Если вы хотите подавить предупреждение только в одной строке кода, Вы можете использовать
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' используется только внутри adecltype
оператор, компилятор жалуется, но вы должны иметь имя variblee
.все выше не
#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).aspxC# нужен другой формат. Это будет выглядеть так (но не работает):
#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