Wyłącz pojedynczy błąd Ostrzeżenia

Czy w visual studio można wyłączyć tylko jedną linię ostrzegawczą w pliku cpp?

Na przykład, jeśli złapię wyjątek i go nie obsłużę, dostaję błąd 4101 (unreferenced local variable). Czy istnieje sposób, aby zignorować to tylko w tej funkcji, ale poza tym zgłosić to w jednostce kompilacji? W tej chwili umieściłem #pragma warning (disable : 4101) na górze pliku, ale to oczywiście wyłącza go dla całego urządzenia.

Author: Sam, 2011-08-23

9 answers

#pragma warning( push )
#pragma warning( disable : 4101)
// Your function
#pragma warning( pop ) 
 126
Author: Andreas Brinck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 10:09:42

Jeśli chcesz tylko stłumić ostrzeżenie w jednej linii kodu, możesz użyć suppress specyfikacja Ostrzeżenia :

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

Dla pojedynczej linii kodu działa to tak samo jak zapisanie następującej:

#pragma warning(push)
#pragma warning(disable: 4101)
// here goes your code where the warning occurs
#pragma warning(pop)
 56
Author: Daniel Seither,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-22 13:06:46

#pragma push / pop są często rozwiązaniem dla tego rodzaju problemów, ale w tym przypadku dlaczego po prostu nie usuniesz niezrealizowanej zmiennej?

try
{
    // ...
}
catch(const your_exception_type &) // type specified but no variable declared
{
    // ...
}
 23
Author: Matteo Italia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 10:11:49

Użyj #pragma warning ( push ), następnie #pragma warning ( disable ), Następnie umieść swój kod, a następnie użyj #pragma warning ( pop ) zgodnie z opisem tutaj :

#pragma warning( push )
#pragma warning( disable : WarningCode)
// code with warning
#pragma warning( pop ) 
 9
Author: sharptooth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:08

Zamiast umieszczać go na wierzchu pliku (lub nawet pliku nagłówkowego), wystarczy owinąć dany kod#pragma warning (push), #pragma warning (disable) i dopasowanie #pragma warning (pop), Jak pokazano tutaj.

Chociaż istnieją inne opcje, w tym #pramga warning (once).

 4
Author: Christian.K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 10:15:04

Można również użyć UNREFERENCED_PARAMETER zdefiniowanego w WinNT.H. Definicja jest prosta:

#define UNREFERENCED_PARAMETER(P)          (P)

I używaj go tak:

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

Dlaczego miałbyś go używać, mógłbyś argumentować, że możesz po prostu pominąć samą nazwę zmiennej. Cóż, są przypadki (inna konfiguracja projektu, debug/Release builds), w których zmienna może być rzeczywiście użyta. W innej konfiguracji ta zmienna jest nieużywana (i stąd Ostrzeżenie).

Jakaś statyczna analiza kodu może jeszcze dać ostrzeżenie dla tego nie-nonsensownego statement (wParam;). W takim przypadku możesz używać DBG_UNREFERENCED_PARAMETER, który jest taki sam jak UNREFERENCED_PARAMETER w kompilacjach debugujących, a P=P w kompilacjach release.

#define DBG_UNREFERENCED_PARAMETER(P)      (P) = (P)
 4
Author: Ajay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 14:56:19

W pewnych sytuacjach musisz mieć określony parametr, ale nie używasz go bezpośrednio.
Na przykład, natknąłem się na niego na VS2010, kiedy 'e' jest używane tylko wewnątrz decltype, kompilator narzeka, ale musisz mieć nazwaną zmienną e.

Wszystkie powyższe sugestie nie - {[3] } sprowadzają się do dodania tylko jednego stwierdzenia:

bool f(int e)
{ 
   // code not using e
   return true;
   e; // use without doing anything
}
 2
Author: Adi Shavit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-07 08:58:41

Jeśli chcesz wyłączyć unreferenced local variable napisz w jakimś nagłówku

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

I używać

catch(const Except & excpt) {
    ignore(excpt); // No warning
    // ...  
} 
 1
Author: Alexey Malistov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 10:22:20

Przykład:

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

Ta pragma jest ważna dla C++ począwszy od Visual Studio 2005.
https://msdn.microsoft.com/en-us/library/2c8f766e (v=vs.80). aspx

Pragma nie jest poprawna dla C# poprzez Visual Studio 2005 poprzez Visual Studio 2015.
Błąd: "oczekiwane wyłączenie lub przywrócenie".
(Chyba nigdy nie doszli do implementacji suppress ...)
https://msdn.microsoft.com/en-us/library/441722ys (v=vs.140). aspx

C# wymaga innego formatu. Wyglądałoby to tak (ale nie działa):

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

Zamiast suppress, musisz disable i enable:

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

To jest tak brzydkie, że myślę, że mądrzej jest po prostu zmienić styl:

if (condition)
{
    // Do nothing (because blah blah blah).
}
else
 1
Author: A876,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-26 20:32:45