MISRA C++:2008 Rule 16-0-1

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

Описание

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

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

Объяснение

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

Реализация Polyspace

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

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

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

Примеры

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

//this comment is compliant     //Compliant
/*
    This comment is compliant
*/

#ifndef TESTING_H               //Compliant
#define TESTING_H               //Compliant

#include <iostream>             //Compliant	
using namespace std;            //Compliant
#include <exception>            //Noncompliant

#endif

Поскольку включать директива следует за оператором кода, который не является ни директивой препроцессору, ни комментарием, Polyspace отмечает включать директиву.

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

Группа: предварительная обработка директив
Категория: необходимый
Введенный в R2013b