2013-12-15 18 views
6

È possibile indicare a GCC di compilare il codice sorgente e ignorare macro come __FILE__, __LINE__, ecc. Ecc. O ridefinirle per estendere, diciamo, una stringa vuota?Ignorare o ridefinire macro standard predefinite GCC

+2

davvero una cattiva idea, perché vorresti questo? Un sacco di codice (comprese le intestazioni di sistema) dipenderà da questi per fare la cosa giusta. Questo è solo in cerca di guai. –

+1

Perché vorresti farlo? perché: 1. Lo standard C proibisce di ridefinirle/definirle 2. Sostituire '__LINE__' con come' 0' o '-1' sembrerebbe imbarazzante (è un valore intero e devi dare qualcosa, diversamente dalla stringa vuota per' __FILE__') 3. Il loro scopo principale * è * di aiutare il debug (se non li vuoi, perché li usi in primo luogo?). Quindi sembra che l'unico modo sia di riscrivere il tuo codice se non li vuoi o meglio tenerli! –

risposta

5

Come per ogni macro si può semplicemente utilizzare:

#undef __LINE__ 
#undef __FILE__ 

e poi li si può ridefinire.

È anche possibile passare -U macroname a undef un nome macro e -D macroname=definition per definire un nome di macro per le opzioni gcc.

Si noti che, come indicato in un'altra risposta, l'annullamento o la ridefinizione di __LINE__ o __FILE__ in C richiama il comportamento non definito.

+2

Ho il sospetto che ciò provochi UB. Si prega di vedere la mia risposta su questo. – alk

+0

@alk d'accordo, lo fa. – ouah

+1

@alk ma penso che la citazione pertinente sia questa: * (c99, 6.10.8p4) "Nessuno di questi nomi di macro, né l'identificatore definito, deve essere oggetto di una direttiva #define o di preprocessing #undef. * – ouah

Problemi correlati