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?

È stato utile?

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.>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top