È 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
risposta
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.
Ho il sospetto che ciò provochi UB. Si prega di vedere la mia risposta su questo. – alk
@alk d'accordo, lo fa. – ouah
@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
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. –
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! –