Errore: i nomi delle macro devono essere identificativi utilizzando #ifdef 0
-
06-07-2019 - |
Domanda
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 delle macro devono essere identificatori
Perché sta succedendo questo?
Soluzione
La direttiva #ifdef viene utilizzata per controllare se è definito un simbolo di preprocessore. Lo standard ( C11 6.4.2 Identificatori
) impone che gli identificatori non debbano 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
_ a b c d e f g h i j k l m
n o p q r s t u v w x y z
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
digit: one of
0 1 2 3 4 5 6 7 8 9
Il modulo corretto per l'utilizzo del 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 saranno inavvertitamente impostati da un codice diverso dal tuo. In altre parole, non usare qualcosa come NOTUSED
o DONOTCOMPILE
che possono essere utilizzati anche da altri. Per sicurezza, l'opzione #if
dovrebbe essere preferita.
Altri suggerimenti
Utilizzare quanto segue per valutare un'espressione (la costante 0 viene valutata come falsa).
#if 0
...
#endif
Questo errore può verificarsi anche se non stai seguendo le regole marco
come
#define 1K 1024 // Macro rules must be identifiers error occurs
Motivo: la macro dovrebbe iniziare con una lettera, non un numero
Cambia in
#define ONE_KILOBYTE 1024 // This resolves
#ifdef 0
...
#endif
#ifdef prevede una macro anziché un'espressione quando si usa costante o espressione
#if 0
...
#endif
o
#if !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
se si utilizza #ifdef, segnala questo errore
#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
Dove #ifdef prevede una macro anziché un'espressione macro
Nota che puoi anche riscontrare questo errore se digiti accidentalmente:
#define <stdio.h>
... invece di ...
#include <stdio.>