Директивы компиляции и проекта кода
MISRA C:2012 Dir 1.1 | Любое определяемое реализацией поведение, от которого зависит выход программы, должно быть задокументировано и понято |
MISRA C:2012 Dir 2.1 | Все исходные файлы должны компилироваться без каких-либо ошибок компиляции |
MISRA C:2012 Dir 4.1 | Отказы во время работы должны быть сведены к минимуму |
MISRA C:2012 Dir 4.3 | Язык сборки должен быть инкапсулирован и изолирован |
MISRA C:2012 Dir 4.4 | Разделы кода не должны быть «закомментированы» |
MISRA C:2012 Dir 4.5 | Идентификаторы в пространстве с тем же именем с перекрывающейся видимостью должны быть типографски однозначными |
MISRA C:2012 Dir 4.6 | typedefs которые указывают на размер и сигнальность, должны использоваться вместо основных числовых типов |
MISRA C:2012 Dir 4.7 | Если функция возвращает информацию об ошибке, то эта информация об ошибке должна быть проверена |
MISRA C:2012 Dir 4.8 | Если указатель на структуру или объединение никогда не дереферируется в модуле преобразования, то реализация объекта должна быть скрыта |
MISRA C:2012 Dir 4.9 | Функция должна использоваться в выборе функционального макроса, где они взаимозаменяемы |
MISRA C:2012 Dir 4.10 | Необходимо принять меры предосторожности, порядок предотвратить включение содержимого файла заголовка более одного раза |
MISRA C:2012 Dir 4.11 | Проверяется валидность значений, переданных в библиотечные функции |
MISRA C:2012 Dir 4.12 | Динамическое выделение памяти не должно использоваться |
MISRA C:2012 Dir 4.13 | Функции, которые предназначены для обеспечения операций на ресурсе, должны вызываться в соответствующей последовательности |
Директивы о компиляции и Проекте кодекса (MISRA C:2012 Administration 1)
Стандартное окружение C: 1.1-1.4
Неиспользованный код: 2.1-2.7
Наборы символов и лексические соглашения: 4.1-4.2
Литералы и константы: 7.1-7.4
MISRA C:2012 Rule 7.1 | Восьмиугольные константы не должны использоваться |
MISRA C:2012 Rule 7.2 | Суффикс «u» или «U» применяется ко всем целочисленным константам, которые представлены в беззнаковом типе |
MISRA C:2012 Rule 7.3 | Строчный символ «l» не должен использоваться в буквальном суффиксе |
MISRA C:2012 Rule 7.4 | Строковый литерал не должен назначаться объекту, если тип объекта не является «указателем на квалифицированный char» |
Декларации и определения: 8.1-8.14
MISRA C:2012 Rule 8.1 | Типы должны быть четко указаны |
MISRA C:2012 Rule 8.2 | Типы функций должны быть в форме прототипа с именованными параметрами |
MISRA C:2012 Rule 8.3 | Во всех объявлениях объекта или функции должны использоваться одинаковые имена и типы классификаторов |
MISRA C:2012 Rule 8.4 | Совместимое объявление должно быть видно, когда определен объект или функция с внешним редактированием |
MISRA C:2012 Rule 8.5 | Внешний объект или функция должны быть объявлены один раз в одном и только одном файле |
MISRA C:2012 Rule 8.6 | Идентификатор с внешним редактированием должен иметь только одно внешнее определение |
MISRA C:2012 Rule 8.7 | Функции и объекты не должны быть определены с помощью внешнего редактирования, если они указаны только в одном модуле преобразования |
MISRA C:2012 Rule 8.8 | Спецификатор класса памяти должен использоваться во всех декларациях объектов и функций, имеющих внутреннее редактирование |
MISRA C:2012 Rule 8.9 | Объект должен быть определен в возможности, если его идентификатор появляется только в одной функции |
MISRA C:2012 Rule 8.10 | Встроенная функция должна быть объявлена статическим классом памяти |
MISRA C:2012 Rule 8.11 | Когда массив с внешним редактированием объявлен, его размер должен быть явно задан |
MISRA C:2012 Rule 8.12 | В списке перечислителей значение неявно заданной постоянной перечисления должно быть уникальным |
MISRA C:2012 Rule 8.13 | Указатель должен указывать на const-квалифицированный тип, когда это возможно |
MISRA C:2012 Rule 8.14 | Классификатор типа ограничения не должен использоваться |
Модель типа Essential: 10.1-10.8
MISRA C:2012 Rule 10.1 | Операнды не должны быть неуместного типа |
MISRA C:2012 Rule 10.2 | Выражения по существу типа символов не должны использоваться ненадлежащим образом в операциях сложения и вычитания |
MISRA C:2012 Rule 10.3 | Значение выражения не должно присваиваться объекту с более узким существенным типом или другой категории существенного типа |
MISRA C:2012 Rule 10.4 | Оба операнда оператора, в которых выполняются обычные арифметические преобразования, должны иметь одну и ту же категорию основных типов |
MISRA C:2012 Rule 10.5 | Значение выражения не должно быть приведено к неподходящему существенному типу |
MISRA C:2012 Rule 10.6 | Значение составного выражения не должно присваиваться объекту с более широким существенным типом |
MISRA C:2012 Rule 10.7 | Если составное выражение используется в качестве одного операнда оператора, в котором выполняются обычные арифметические преобразования, то другой операнд не должен иметь более широкого существенного типа |
MISRA C:2012 Rule 10.8 | Значение составного выражения не должно быть приведено к другой категории основных типов или к более широкому типу |
Преобразование типа указателя: 11.1-11.9
MISRA C:2012 Rule 11.1 | Преобразование не должно выполняться между указателем на функцию и любым другим типом |
MISRA C:2012 Rule 11.2 | Преобразование не должно выполняться между указателем на неполный тип и любым другим типом |
MISRA C:2012 Rule 11.3 | Приведение не должно выполняться между указателем на тип объекта и указателем на другой тип объекта |
MISRA C:2012 Rule 11.4 | Преобразование не должно выполняться между указателем на объект и целый тип |
MISRA C:2012 Rule 11.5 | Преобразование не должно выполняться из указателя в пустой в указатель на объект |
MISRA C:2012 Rule 11.6 | Приведение не должно выполняться между указателем на пустоту и арифметическим типом |
MISRA C:2012 Rule 11.7 | Приведение не должно выполняться между указателем на объект и нецелочисленным арифметическим типом |
MISRA C:2012 Rule 11.8 | Приведение не должно удалять какую-либо несовпадающую или летучую проверку из типа, на который указывает указатель |
MISRA C:2012 Rule 11.9 | Макрос NULL должен быть единственно разрешенной формой целочисленной нулевой константы указателя |
Выражения: 12,5 (MISRA C: 2012 Administration 1)
MISRA C:2012 Rule 12.5 | The sizeof оператор не должен иметь операнд, который является параметром функции, объявленным как «массив типа» |
Побочные эффекты: 13.1-13.6
MISRA C:2012 Rule 13.1 | Списки инициализаторов не должны содержать стойких побочных эффектов |
MISRA C:2012 Rule 13.2 | Значение выражения и его стойких побочных эффектов должно быть одинаковым при всех разрешенных порядках |
MISRA C:2012 Rule 13.3 | Полное выражение, содержащее оператор шага (+ +) или декремента (--), не должно иметь других потенциальных побочных эффектов, кроме тех, которые вызваны оператором шага или декремента |
MISRA C:2012 Rule 13.4 | Результат оператора назначения не должен использоваться |
MISRA C:2012 Rule 13.5 | Операнд правой руки логического & & или || оператора не должен содержать стойких побочных эффектов |
MISRA C:2012 Rule 13.6 | Операнд оператора sizeof не должен содержать никаких выражений, которые имеют потенциальные побочные эффекты |
Выражения оператора управления: 14.1-14.4
Поток управления: 15.1-15.7
Операторы Switch: 16.1-16.7
Указатели и массивы: 18.1-18.8
MISRA C:2012 Rule 18.1 | Указатель, полученный из арифметики на операнде указателя, должен адресовать элемент того же массива, что и этот операнд указателя |
MISRA C:2012 Rule 18.2 | Вычитание между указателями должно применяться только к указателям, которые адресуют элементы одного массива |
MISRA C:2012 Rule 18.3 | Реляционные операторы >, > =, < и < = не должны применяться к объектам типа указателя, кроме тех случаев, когда они указывают на один и тот же объект |
MISRA C:2012 Rule 18.4 | Операторы +, -, + = и - = не должны применяться к выражению типа указателя |
MISRA C:2012 Rule 18.5 | Объявления должны содержать не более двух уровней вложения указателей |
MISRA C:2012 Rule 18.6 | Адрес объекта с автоматическим хранением не должен копироваться в другой объект, сохраняющийся после прекращения существования первого объекта |
MISRA C:2012 Rule 18.7 | Гибкие представители массива не должны быть объявлены |
MISRA C:2012 Rule 18.8 | Типы массивов переменной длины не должны использоваться |
Перекрывающееся хранилище: 19.1-19.2
Директивы предварительной обработки: 20.1-20.14
MISRA C:2012 Rule 20.1 | Директивам # include должны предшествовать только директивы предпроцессора или комментарии |
MISRA C:2012 Rule 20.2 | '", или\символы и/* или/последовательности символов не должны находиться в имени файла заголовка |
MISRA C:2012 Rule 20.3 | Директива # include должна сопровождаться последовательностью < filename > или «filename» |
MISRA C:2012 Rule 20.4 | Макрос не должен быть определен с таким же именем, как ключевое слово |
MISRA C:2012 Rule 20.5 | # undef не должен использоваться |
MISRA C:2012 Rule 20.6 | Лексемы, которые выглядят как директива предварительной обработки, не должны происходить в макросе аргумента |
MISRA C:2012 Rule 20.7 | Выражения, следующие из расширения макро- параметры, заключаются в круглые скобки |
MISRA C:2012 Rule 20.8 | Управляющее выражение директивы предварительной обработки # if или # elif должно вычисляться равным 0 или 1 |
MISRA C:2012 Rule 20.9 | Все идентификаторы, используемые в управляющем выражении директивы предварительной обработки # if или # elif, должны быть # defined d перед оценкой |
MISRA C:2012 Rule 20.10 | Операторы предпроцессора # и # не должны использоваться |
MISRA C:2012 Rule 20.11 | Макропараметр, непосредственно следующий за оператором #, не должен немедленно сопровождаться оператором # # |
MISRA C:2012 Rule 20.12 | Параметр макроса, используемый в качестве операнда операторам # или # #, который сам подлежит дальнейшей замене макросом, должен использоваться только в качестве операнда этим операторам |
MISRA C:2012 Rule 20.13 | Линии, чья первая лексема #, будет действительной директивой предварительной обработки |
MISRA C:2012 Rule 20.14 | Все директивы # else, # elif и # endif предпроцессора должны находиться в том же файле, что и директива # if, # ifdef или # ifndef, с которой они связаны |
Стандартные библиотеки: 21.1-21.12
Стандартные библиотеки: 21,13 - 21,20 (MISRA C: 2012 Administration 1)
MISRA C:2012 Rule 21.13 | Любое значение, переданное функции в <ctype.h> должно быть представимо как unsigned char или быть значением EOF |
MISRA C:2012 Rule 21.14 | Функция Standard Library memcmp не должен использоваться для сравнения строк с завершением null |
MISRA C:2012 Rule 21.15 | Аргументы указателя на функции Стандартной библиотеки memcpy , memmove и memcmp должны быть указателями на квалифицированные или неквалифицированные версии совместимых типов |
MISRA C:2012 Rule 21.16 | Аргументы указателя на функцию Standard Library memcmp должен указывать либо на тип указателя, по существу на тип со знаком, по существу беззнаковый тип, по существу на логический тип или по существу на тип перечисления |
MISRA C:2012 Rule 21.17 | Использование функции обработки строк из <string.h> не приводит к доступам за пределы объектов, на которые ссылаются их параметры указателя |
MISRA C:2012 Rule 21.18 | The size_t аргумент передан любой функции в <string.h> должно иметь соответствующее значение |
MISRA C:2012 Rule 21.19 | Указатели, возвращенные функциями Стандартной библиотеки localeconv , getenv , setlocale или strerror должны использоваться только так, как если бы у них был указатель на const -квалифицированный тип |
MISRA C:2012 Rule 21.20 | Указатель, возвращенный функциями Стандартной библиотеки asctime , ctime , gmtime , localtime , localeconv , getenv , setlocale или strerror не будет использоваться после последующего вызова той же функции |
Стандартные библиотеки: 21,21 (MISRA C: 2012 Administration 2)
Ресурсы: 22,7 - 22,10 (MISRA C: 2012 Поправка 1)
MISRA C:2012 Rule 22.7 | Макрос EOF должен сравниваться только с неизмененным возвращаемым значением от любой функции стандартной библиотеки, способной возвращать EOF |
MISRA C:2012 Rule 22.8 | Значение errno устанавливается в нуль перед вызовом errno -setting-function |
MISRA C:2012 Rule 22.9 | Значение errno должен быть испытан против нуля после вызова errno -настройка функции |
MISRA C:2012 Rule 22.10 | Значение errno должны быть проверены только, когда последняя вызываемая функция была errno -настройка функции |