Przejdź do treści

DevStyle - Strona Główna
Ignorowanie ostrzeżeń kompilacji

Ignorowanie ostrzeżeń kompilacji

Maciej Aniserowicz

18 kwietnia 2008

Tools

Tagi:

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” :)

Zobacz również