Заданный оператор препроцессора должен только использоваться в одной из двух стандартных форм
Заданный оператор препроцессора должен только использоваться в одной из двух стандартных форм.
defined
оператор препроцессора проверяет, задан ли идентификатор как макрос. В C только две допустимых формы для этого оператора:
defined (identifier)
defined identifier
Используя любые другие результаты формы в недопустимом коде, о котором не может сообщить компилятор. Например, если вы используете выражения в качестве аргументов для defined
оператор, код недопустим. Если компилятор не сообщает о недопустимом использовании defined
, диагностирование недопустимого кода затрудняет.
Если ваш #if
или подобные директивы препроцессору расширяются, чтобы создать defined
оператор, поведение кода не определено. Например:
#define DEFINED defined #if DEFINED(X)
#if
директива препроцессору расширяется, чтобы сформировать defined
операция. В зависимости от вашей среды код может вести себя неожиданными способами, ведя к ошибкам, которые затрудняют, чтобы диагностировать.Чтобы избежать недопустимого кода, ошибки и неопределенное поведение, используют только разрешенные формы при использовании defined
оператор.
Polyspace® отмечает неправильные использования defined
оператор, такой как:
Оператор defined
используется без идентификатора.
Оператор defined
появляется после макрорасширения.
Оператор defined
используется со сложным выражением.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: предварительная обработка директив |
Категория: необходимый |