fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
3 minut

Ignorowanie ostrzeżeń kompilacji


18.04.2008

Generalnie ostrzeżenia kompilatora służą wskazaniu potencjalnie niebezpiecznych miejsc w naszym kodzie. Dość powszechny jest także pogląd (moim zdaniem – słuszny) nakazujący traktować ostrzeżenia na równi z błędami. Visual Studio umożliwa nam takie postępowanie poprzez opcję “Treat warnings as errors” (we właściwościach projektu, zakładka Build):

Jej domyślna wartość to None, zachęcam jednak do zmiany tego ustawienia.

Co natomiast w przypadku, gdy ostrzeżenie jest nam znane i z całą odpowiedzialnością je akceptujemy? Jak zmusić kompilator do jego ignorowania?
Oczywiście mamy taką możliwość. A nawet dwie…

Spójrzmy na kod:

 1:   // CS0169 – The field ‘WindowsFormsApplication1.Form1.unusedVariable’ is never used
2: int unusedVariable;
3:
4: // CS3008 – Identifier ‘WindowsFormsApplication1.Form1._nonCLSCompliant’ is not CLS-compliant
5: protected int _nonCLSCompliant;

W komentarzach umieściłem treść ostrzeżeń z okienka “Errors”. Numer ostrzeżenia można znaleźć w internecie, bądź klikając prawym przyciskiem myszy na danym ostrzeżeniu i wybraniu z menu kontekstowego opcji “Show Error Help”.

Oto jak można pozbyć się upomnień kompilatora:

 – w skali całego projektu

Bardzo proste, ponownie skorzystamy z zakładki Build w oknie właściwości projektu:

I mamy spokój.

 – tylko w wyznaczonym fragmencie kodu

Czasami jednak takie generalizowanie nie jest najelpszym rozwiązaniem. Wówczas możemy uciec się do mniej chyba znanej funkcjonalności, a mianowicie dyrektywy preprocesora.
W praktyce wygląda to tak:

 1:   #pragma warning disable 0169, 3008
2:
3: // CS0169 – The field ‘WindowsFormsApplication1.Form1.unusedVariable’ is never used
4: int unusedVariable;
5:
6: // CS3008 – Identifier ‘WindowsFormsApplication1.Form1._nonCLSCompliant’ is not CLS-compliant
7: protected int _nonCLSCompliant;
8:
9: #pragma warning restore 0169, 3008

Tym sposobem osiągamy ignorowanie tylko wyznaczonych ostrzeżeń – tylko w wyznaczonym obrębie kodu.

“Ignorance is bliss” :)

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit
Notify of
Tom
Tom

Przydałyby się jakieś konkretne przykłady kiedy ignorowanie wyjątków "jest błogosławieństwem"

Procent

W jednym z projektów jedno assembly miało ustawiony atrybtut CLSCompliant. Nie mogłem tego zmienić, miałem jednak pewność że moja klasa w "procederze bycia kompatybilnym" nie bierze udziału (tak naprawdę ten atrybut w ogóle nie był potrzebny). Tak więc przykład z powyższego posta pochodzi właśnie z tamtej sytuacji, gdy deklarację moich zmiennych otoczyłem #pragmami.

Moja książka

Facebook

Zobacz również