У меня есть исходный код приложения, написанного на С++, и я просто хочу что-то прокомментировать, используя:
#ifdef 0
...
#endif
И я получаю эту ошибку
ошибка: имена макросов должны быть идентификаторами
Почему это происходит?
У меня есть исходный код приложения, написанного на С++, и я просто хочу что-то прокомментировать, используя:
#ifdef 0
...
#endif
И я получаю эту ошибку
ошибка: имена макросов должны быть идентификаторами
Почему это происходит?
Директива #ifdef используется для проверки наличия символа препроцессора. Стандарт (C11 6.4.2 Identifiers
) требует, чтобы идентификаторы не начинались с цифры:
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 принимает значение false).
#if 0
...
#endif
Эта ошибка также может возникать, если вы не выполняете правила marco
Как
#define 1K 1024 // Macro rules must be identifiers error occurs
Причина: макрос Должен начинаться с буквы, а не числа
Изменить на
#define ONE_KILOBYTE 1024 // This resolves
Обратите внимание, что вы также можете нажать эту ошибку, если случайно введите:
#define <stdio.h>
... вместо...
#include <stdio.>
#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 ожидает макрос, а не выражение макроса
Иногда, если вы копируете код из PDF-документа и вставляете его в свой редактор; скрытые странные символы включены. Таким образом, эта ошибка может также возникать в этой ситуации.
Будьте осторожны. Вы должны заменить все пробелы, скопированные для новых, а также сделать то же самое с возвратом каретки.