MISRA C:2012 Rule 20.1

Директивам #include должны только предшествовать директивы препроцессору или комментарии

Описание

Управляйте определением

Директивам #include должны только предшествовать директивы препроцессору или комментарии.

Объяснение

Для лучшей удобочитаемости кода, группа весь #include директивы в файле наверху исходного файла. Неопределенное поведение может произойти, если вы используете #include включать стандартный заголовочный файл в объявлении или определении или если вы используете часть Стандартной Библиотеки прежде включая связанные стандартные заголовочные файлы.

Реализация Polyspace

Polyspace® текст флагов, который предшествует #include директива. Polyspace игнорирует директивы препроцессору, комментарии, пробелы или символы новой строки. Polyspace также игнорирует код, который скрыт при помощи директив условной компиляции, таких как #if или #ifdef.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.

Примеры

развернуть все

#if DEBUG

assert(0); 

#endif

#include<stdlib> //Compliant


int x;

#include <conio> //Noncompliant

В этом примере, первом #include оператору предшествует assert оператор. Поскольку assert оператор скрыт #if условие, Polyspace не отмечает #include оператор. Второй #include оператор следует объявлению переменной, которое не скрыто. Polyspace отмечает второй #include оператор.

Проверяйте информацию

Группа: предварительная обработка директив
Категория: консультация
Категория AGC: консультация