Errore: i nomi di macro devono essere identificatori che utilizzano #ifdef 0

Ho il codice sorgente di un’applicazione scritta in C ++ e voglio solo commentare qualcosa usando:

#ifdef 0 ... #endif 

E ottengo questo errore

errore: i nomi di macro devono essere identificatori

Perché sta succedendo?

La direttiva #ifdef viene utilizzata per verificare se è stato definito un simbolo del preprocessore. Lo standard ( C11 6.4.2 Identifiers ) impone che gli identificatori non devono iniziare con una cifra:

 identifier: identifier-nondigit identifier identifier-nondigit identifier digit identifier-nondigit: nondigit universal-character-name other implementation-defined characters> nondigit: one of _ abcdefghijklm nopqrstuvwxyz ABCDEFGHIJKLM NOPQRSTUVWXYZ digit: one of 0 1 2 3 4 5 6 7 8 9 

Il modulo corretto per utilizzare il pre-processore per bloccare il codice è:

 #if 0 : : : #endif 

Puoi anche usare:

 #ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST : : : #endif 

ma devi essere sicuro che i simboli non verranno inavvertitamente impostati da un codice diverso dal tuo. In altre parole, non usare qualcosa come NOTUSED o DONOTCOMPILE che altri potrebbero usare. Per sicurezza, l’opzione #if deve essere preferita.

Utilizzare quanto segue per valutare un’espressione (costante 0 restituisce false).

 #if 0 ... #endif 

Questo errore può verificarsi anche se non stai seguendo le regole di marco

Piace

 #define 1K 1024 // Macro rules must be identifiers error occurs 

Motivo: Macro Dovrebbe iniziare con una lettera, non con un numero

Cambia in

 #define ONE_KILOBYTE 1024 // This resolves 
 #ifdef 0 ... #endif 

#ifdef si aspetta una macro piuttosto che un’espressione quando si usano costanti o espressioni

 #if 0 ... #endif 

o

 #if !defined(PP_CHECK) || defined(PP_CHECK_OTHER) .. #endif 

se si usa #ifdef, segnala questo errore

 #ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER) .. #endif 

Dove #ifdef si aspetta una macro piuttosto che una macro expressione

Nota che puoi anche inserire questo errore se digiti accidentalmente:

 #define  

…invece di…

 #include