2015-01-03 8 views
9

Ho lo stesso problema, come descritto da Jonathon Reinhart qui: Temporarily disable gcc warning on redefinitiongcc Disabilita tutto avvertenze per un paio di righe di codice

Ecco perché devo utilizzare le librerie di partito thrid (C solo), che getta tonnellate di avvertimenti come questo

Warning "__always_inline" redefined [enabled by default]  

Quello che voglio è qualcosa di simile:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-W???" 
    #include "someheader.h" 
    #include "otherheader.h" 
#pragma GCC diagnostic pop 

C'è un modo per disattivare avvertimenti da gcc che sono abilitato per default con un

#pragma GCC diagnostic ignored 

EDIT: qui è il blocco che causa l'avviso (file: compiler.h):

#if defined(__CC_ARM) 
# define __always_inline __forceinline 
#elif (defined __GNUC__) 
# define __always_inline inline __attribute__((__always_inline__)) 
#elif (defined __ICCARM__) 
# define __always_inline _Pragma("inline=forced") 
#endif 
+1

è scortese da parte loro usare nomi riservati come quelli. Hai contattato i fornitori delle librerie? Potresti chiedere loro di fornire file di intestazione adatti per l'uso con un compilatore C. potrebbe attaccare le intestazioni fornite con sed o simili e modificare i macro per non utilizzare i nomi riservati. – Jasen

+7

"sweep the bugs under the rug" sembra una soluzione sub-ottimale a questo problema – Jasen

+0

Il fornitore (Atmel) viene informato: http://asf.atmel.com/bugzilla/show_bug.cgi?id=3486 Hai ragione: sweeping bugs non è la soluzione migliore, ma correggere bug come la ridefinizione dell'esatta stessa linea * __ always_inline * per ogni nuova versione della libreria ancora e ancora è ancora peggio. –

risposta

1

L'ho risolto annullando la definizione di tutte le righe in cui __always_inline è stato definito. :-( Grazie Jasen per l'aiuto!

Problemi correlati