Отключить предупреждение об ошибке
есть ли способ отключить только одну строку предупреждения в файле 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)
#pragmapush/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