Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для C. Директивы препроцессора (строки начинающиеся с '#') могут использоваться для условного включения или исключения кода из компиляции. Некорректно написанные препроцессорные директивы могут привести к некорректному включению или исключению кода, которое заранее не предполагалось. Поэтому все директивы предварительной обработки должны быть синтаксически корректны.
Рассмотрим пример:
// #define CIRCLE #define SQUARE float processArea(float x) { #ifdef CIRCLE return 3.14 * x * x; #elf defined(SQUARE) return x * x; #else1 return 0; #endif }
Здесь неправильно написаны директивы препроцессора '#elif' и '#else', что приведет к исключению всего кода из тела функции. Корректный вариант:
// #define CIRCLE #define SQUARE float processArea(float x) { #ifdef CIRCLE return 3.14 * x * x; #elif defined(SQUARE) return x * x; #else return 0; #endif }
Данная диагностика классифицируется как:
|