2016-06-29 43 views
5

Qual è il modo corretto di sopprimere l'avviso di funzione inutilizzato di Xcode per le funzioni nell'intestazione di una libreria?Modo corretto per sopprimere l'avviso di funzione inutilizzato di Xcode per le funzioni inline nell'intestazione della libreria

Per esempio, Ho la seguente funzione definita in MathUtils.h:

file sorgenti
namespace MathUtils { 
    static std::complex<double> cis(double x) { 
     return std::complex<double>(cos(x), sin(x)); 
    } 
    ... 
} 

che includono questa intestazione, ma non utilizzano questa funzione specifica, far scattare l'allarme.

Potrei aggiungere un pragma di avvertimento attorno alla funzione per disabilitare l'avviso, ma quello non sembra il modo giusto - questo sembra un problema generale.

+0

Quali sono le opzioni del compilatore quando viene attivato l'avviso? Quali sono le versioni di xcode e clang? – osgx

+0

Entrambi Xcode 7/8. L'avviso pertinente è Funzioni non utilizzate. – Danra

+0

Danra, comando completo del compilatore con tutte le opzioni della riga di comando? (controlla il log di compilazione completo - "Espandi tutte le trascrizioni" - http://stackoverflow.com/questions/19014359/how-do-i-view-the-full-build-log-on-xcode5 - dovrebbe esserci un comando con clang) – osgx

risposta

5

Se si modifica la funzione su static inline anziché static, il problema si risolve.

+0

Ho modificato il metodo statico in linea, costruito, ma sto ancora ricevendo l'avviso "funzione non utilizzata" su Xcode 9.1. –

3

Se si specifica la posizione del file con -isystem anziché -I, clang ignorerà automaticamente tutti gli avvisi nel file di intestazione. Per ulteriori informazioni, vedere http://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-in-system-headers.

Per fare ciò con XCode, per quanto ne so è necessario aggiungere il flag del compilatore appropriato alla sezione "Altri flag C++" delle impostazioni di compilazione.

Inoltre, si ricevono solo gli avvisi perché la funzione è stata definita con static - ciò significa che la funzione viene definita separatamente in ciascuna unità di traduzione in cui si include l'intestazione e non è visibile a nessun'altra unità. Puoi eliminare gli errori semplicemente rimuovendo la parola chiave static.

+0

La rimozione dello statico crea errori di linker nel caso in cui l'intestazione sia inclusa in più di un modulo. – Danra