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.
9 answers
#pragma warning( push )
#pragma warning( disable : 4101)
// Your function
#pragma warning( pop )
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)
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
{
// ...
}
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 )
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)
.
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)
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
}
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
// ...
}
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
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