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