7

W jaki sposób można utworzyć ostrzeżenie kompilatora (w modelu #error, z wyjątkiem ostrzeżenia) celowo w programie Visual C++, które pojawi się na liście błędów z poprawnym plikiem i numerem linii?Umyślne ostrzeżenia kompilatora dla Visual C++, które pojawiają się na liście błędów?

GCC i inne kompilatory oferują #warning, ale kompilator MSVC nie.

„rozwiązanie” na http://support.microsoft.com/kb/155196 nie analizuje w liście błędów Visual Studio.

+0

Wygląda na to, że nie masz pojęcia, co to jest przepełnienie stosu. – Juliano

+0

To jest S.O. rodzaj pytania. Chciałbym również wiedzieć, co inni zrobiliby lepiej. – Thomas

+0

@Juliano: Co dokładnie uważasz za niewłaściwe w odniesieniu do tego pytania? Jest to z pewnością na temat i interesujące. Może to być duplikat, ale nie mogłem znaleźć duplikatu pytania. –

Odpowiedz

10

Wystarczy dodać do zdrowego zawierać plik (ex, stdafx.h):

#define __STR2__(x) #x 
#define __STR1__(x) __STR2__(x) 
#define __LOC__ __FILE__ "("__STR1__(__LINE__)") : warning W0000: #pragma VSWARNING: " 
#define VSWARNING(x) message(__LOC__ x) 

Użyj tego jak:

#pragma VSWARNING("Is this correct?!?!") 

kompilator wyświetli:

c:\dir\file.h(11) : warning W0000: #pragma VSWARNING: Is this correct?!?! 

A karta Lista błędów wyświetli ostrzeżenie w tabeli:

Type  Num Description            File Line 
[Warning] 13 warning W0000: #pragma VSWARNING: Is this correct?!?! file.h 11 

dokładnie jak normalny Visual Studio kompilator ostrzeżenia.

+1

Używam do tego podobnej implementacji (opublikowałem ją [w odpowiedzi na inne pytanie] (http://stackoverflow.com/questions/2703528/what-code-have-you-written-with-pragma- you-found-useful/2706693 # 2706693)). Nie zdawałem sobie sprawy, że Visual C++ zastąpi tekst dyrektywy pragma; To bardzo fajnie. –

+1

W powiązanej notatce można również użyć "błędu" zamiast "ostrzeżenia" w tekście wyjściowym; powoduje to awarię kompilacji (np. '# error'), ale pozwala kompilacji kontynuować proces tłumaczenia do końca jednostki tłumaczeniowej (co jest niezwykle przydatne w niektórych scenariuszach). –

1

Jest to rodzaj głupie odpowiedzi na swoje pytanie, ale często, jeśli trzeba dodać celowe ostrzeżenie, będę wpisać coś takiego:

#pragma asdfkljasdlfjasklfjklasjdfklj 

który wydaje Unknown Pragma ostrzegawczy z numerem linii i wszystkich .

+0

To jednak nie wyświetla aktualnego komunikatu na wyjściu kompilatora i na liście błędów. Pojawia się tylko "nieznana pragma". – Thomas

Powiązane problemy