2010-01-26 17 views
19

Używając sprintf, kompilator ostrzega mnie, że funkcja jest przestarzała.Dodaj własne ostrzeżenie kompilatora

Jak mogę wyświetlić ostrzeżenie o własnym kompilatorze?

+1

Co sprintf wycofywana mieć do czynienia z tym pytaniem? –

+0

Tylko przykład ostrzeżenia kompilatora, który został wprowadzony przez "użytkownika", a nie czysto wygenerowany przez kompilator. – Warpin

Odpowiedz

19

W Visual Studio,

#pragma message ("Warning goes here")

Na marginesie, jeśli you want to suppress such warnings znajdź identyfikator ostrzeżenie kompilatora (dla nieaktualnych ostrzeżenia, to C4996) i wstawić ten wiersz:

#pragma warning(disable : 4996)

+0

Nie robi to jednak dokładnie tego, czego chce Martin, ale chce, aby ostrzeżenie było emitowane, gdy funkcja jest _używana, a nie podczas kompilacji. –

+0

Domyślam się, że moje pytanie mogło być przeczytane w dowolny sposób (przepraszam za to!), Ale ten był tym, czego szukałem. – Warpin

12

Aby oznaczyć funkcję jako przestarzałą, użyj __declspec(deprecated), np.

__declspec(deprecated) void f(); 
+1

Myślę, że właśnie tego chciał OP. – LiraNuna

+2

Pyta o pokazanie własnego ostrzeżenia, a nie określonego * przestarzałego * ostrzeżenia. –

18

Chociaż nie ma standardowej #warning directice wiele kompilatorów (GCC tym, VC, Intels i jabłka), wsparcie #warning message.

#warning "this is deprecated" 

Często lepiej jest nie tylko wychować ostrzeżenie (co ludzie można pominąć), ale niech kompilacji całkowicie zawodzą, za pomocą dyrektywy #error (co jest standardem):

#if !defined(FOO) && !defined(BAR) 
# error "you have neither foo nor bar set up" 
#endif 
+6

MSVC++ 2013 go nie obsługuje –

+0

Nie widzę, że to działa w MSVC++ 2015 lub 2017 albo. – Zitrax

6

W VC jeśli chcesz ostrzeżenie, aby pokazać się w liczbie ostrzegawczy na końcu zestawienia trzeba użyć tego formatu:

#pragma message(": warning<put what you like here>: blah blah blah") 

ważne jest sekwencja: dwukropek, spacja, „wA rning ", coś lub nic, dwukropek", twój tekst ostrzegawczy "

Jeśli chcesz mieć ochotę, możesz dodać plik i numer linii przed pierwszym dwukropkiem, dzięki czemu możesz dwukrotnie kliknąć, aby przejść do kodu (z microsoft.com):

// pragma_directives_message1.cpp 
// compile with: /LD 
#if _M_IX86 >= 500 
#pragma message("_M_IX86 >= 500") 
#endif 

#pragma message("") 

#pragma message("Compiling " __FILE__) 
#pragma message("Last modified on " __TIMESTAMP__) 

#pragma message("") 

// with line number 
#define STRING2(x) #x 
#define STRING(x) STRING2(x) 

#pragma message (__FILE__ "[" STRING(__LINE__) "]: test") 

#pragma message("") 
+0

Dzięki - zaktualizowałem i skopiowałem - myślę, że to ta sama strona, ale to było jakiś czas temu! – noelicus

0

myślę, że to powinno działać

void foo() __attribute__ ((deprecated("This function is deprecated. \nFor further information please refer to the README")));