Erro: nomes de macro deve ser identificadores utilizando #ifdef 0
-
06-07-2019 - |
Pergunta
Eu tenho o código fonte de um aplicativo escrito em C ++ e eu só quero comentar algo usando:
#ifdef 0
...
#endif
E eu recebo este erro
erro: macro nomes devem ser identificadores
Por que isso está acontecendo?
Solução
A directiva #ifdef é usado para verificar se um símbolo de pré-processamento é definida Os padrão (C11 6.4.2 Identifiers
) mandatos que os identificadores não devem começar com um dígito:.
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
A forma correcta para a utilização do pré-processador para bloquear o código é:
#if 0
: : :
#endif
Você também pode usar:
#ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST
: : :
#endif
mas você precisa ter certeza de que os símbolos serão não ser inadvertidamente definido pelo código diferente do seu. Em outras palavras, não use algo como NOTUSED
ou DONOTCOMPILE
que outros também podem usar. Para ser seguro, a opção #if
deve ser preferida.
Outras dicas
Use o seguinte para avaliar uma expressão (constante 0 é avaliado como false).
#if 0
...
#endif
Este erro também pode ocorrer se você não está seguindo as regras marco
Como
#define 1K 1024 // Macro rules must be identifiers error occurs
Motivo: macro deve começar com uma letra, não um número
Mude para
#define ONE_KILOBYTE 1024 // This resolves
#ifdef 0
...
#endif
#ifdef esperar uma macro em vez de expressão quando se utiliza constante ou expressão
#if 0
...
#endif
ou
#if !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
Se #ifdef é usado a ele relata esse erro
#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
Onde #ifdef esperar uma macro em vez de expresssion macro
Note que você também pode bater este erro se você digitar acidentalmente:
#define <stdio.h>
... em vez de ...
#include <stdio.>