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