Ошибка:имена макросов должны быть идентификаторами с использованием #ifdef 0
-
06-07-2019 - |
Вопрос
У меня есть исходный код приложения, написанного на C++, и я просто хочу что-то прокомментировать, используя:
#ifdef 0
...
#endif
И я получаю эту ошибку
ошибка:имена макросов должны быть идентификаторами
Почему это происходит?
Решение
Директива #ifdef используется для проверки , определен ли символ препроцессора. Стандарт ( C11 6.4.2 Идентификаторы
) требует, чтобы идентификаторы не начинались с цифры
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
Правильная форма для использования препроцессора для блокировки кода:
#if 0
: : :
#endif
Вы также можете использовать:
#ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST
: : :
#endif
но вы должны быть уверены, что символы не будут случайно установлены кодом, отличным от вашего. Другими словами, не используйте что-то вроде NOTUSED
или DONOTCOMPILE
, которое также могут использовать другие. На всякий случай предпочтительнее использовать параметр #if
.
Другие советы
Используйте следующее для оценки выражения (константа 0 оценивается как ложная).
#if 0
...
#endif
Эта ошибка также может возникнуть, если вы не соблюдаете правила Марко.
Нравиться
#define 1K 1024 // Macro rules must be identifiers error occurs
Причина:Макрос Должен начинаться с буквы, а не цифры
Изменить на
#define ONE_KILOBYTE 1024 // This resolves
#ifdef 0
...
#endif
#ifdef ожидайте макрос, а не выражение при использовании константы или выражения
#if 0
...
#endif
или
#if !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
если используется #ifdef, он сообщает об этой ошибке
#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
Где #ifdef ожидает макрос, а не выражение макроса
Обратите внимание, что вы также можете нажать эту ошибку, если случайно наберете:
#define <stdio.h>
... вместо ...
#include <stdio.>