2012-05-07 13 views
5

sto compilazione con cl.exe versione _MSC_FULL_VER == 160030319 con livello di allarme a 4. ottengo questo avvertimento:yvals.h su Windows SDK 7.1 compilatore

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\yvals.h(773) : warning C4514: 'std::_Mutex::_Mutex' : unreferenced inline function has been removed 

Quale è questo pezzo di codice sorgente:

__thiscall _Mutex(_Uninitialized) 
{ // do nothing 
} 

yvals.h è incluso nel stdint.h cui mi includo in questo modo:

#pragma warning(disable:4514) 

#include <stdint.h> 

#pragma warning(default:4514) 

Ma è ancora non eliminare l'avviso. Sto facendo qualcosa di sbagliato qui?

+0

Hmm ... sembra che 'yvals.h' venga incluso da qualche altra parte in' stdint.h'. Se rimuovo il 'default: 4514' l'avviso scompare –

+0

Ho racchiuso tutti i miei inclusi ma persiste ancora –

+0

Non capisco questo - ho appena guardato l'output del preprocessore C ('/P') e tutto sembra in ordine - La riga di offendere 'yvals.h' è stata corretta. –

risposta

4

Ho trovato la risposta here. Qualcuno lo ha segnalato come un bug, ma è stato chiuso come da progetto. La risposta è che l'avviso non entra in azione fino alla fine dell'unità di traduzione. Prezzo:

Grazie per aver segnalato questo problema. L'ho risolto come By Design perché gli avvertimenti 4514 e 4710 sono emessi alla fine della traduzione dell'unità (un'unità di traduzione è un file sorgente e tutte le intestazioni incluse). Ecco perché disabilitarli per parte dell'unità di traduzione non ha alcun effetto. Sebbene i numeri di riga possano far sembrare che il compilatore stia emettendo questi avvertimenti nel mezzo dell'unità di traduzione mentre sta compilando il codice, questo non è il caso, è il .

Attenzione 4514 "funzione inline referenziata è stato rimosso" è emessa alla fine della unità di traduzione dal compilatore front-end (responsabile dell'analisi C++), perché solo allora può stabilire che nulla nella unità di traduzione riferimenti che funzionano in linea. Lo cerca il numero di riga della funzione, ma se l'avviso è emesso o meno dipende dal fatto che sia abilitato alla fine dell'unità di traduzione , non se sia stato abilitato durante la compilazione della funzione .

Quindi è necessario tenerlo sempre disattivato o non preoccuparsene.

+0

è frustrante. Lo disabiliterò in tutta l'intera build - dobbiamo _ essere privi di avvertenze per un'integrazione continua :(Grazie per la risposta :) !! –

Problemi correlati