exponenta event banner

MISRA C:2012 Dir 1.1

Любое определяемое реализацией поведение, от которого зависит выход программы, должно быть задокументировано и понято

Описание

Определение директивы

Любое определяемое реализацией поведение, от которого зависит выход программы, должно быть задокументировано и понято.

Объяснение

Кодовая конструкция имеет поведение, определяемое реализацией, если стандарт C позволяет компиляторам выбирать собственные спецификации для конструкции. Полный перечень поведения, определяемого реализацией, содержится в приложении J.3 к стандарту ISO/IEC 9899:1999 (C99) и в приложении G.3 к стандарту ISO/IEC 9899:1990 (C90).

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

Внедрение Polyspace

Анализ выявляет следующие возможности поведения, определяемого реализацией, в C99 и их аналогах в C90. Если вы знаете поведение реализации компилятора, оправдайте результат анализа соответствующими комментариями. Для обоснования результата присвойте один из следующих статусов: Justified, No action planned, или Not a defect.

Совет

Для массового выравнивания всех результатов, которые указывают на одно и то же поведение, определенное реализацией, используйте столбец Подробно (Detail) на панели Список результатов (Results List). Щелкните по заголовку столбца, чтобы сгруппировать все результаты с одной и той же записью. Выберите первый результат, а затем выберите последний результат при удержании Shift ключ. Присвойте статус одному из результатов. Если столбец подробных данных не отображается, щелкните правой кнопкой мыши любой другой заголовок столбца и включите этот столбец.

C99 Стандартное приложение, док.Поведение, которое необходимо задокументироватьКак Polyspace ® помогает
J.3.2: СредаАльтернативный способ main может быть определена функция.

Флаги анализа main с аргументами и возвращаемыми типами, отличными от:

int main(void) { ... }
или
int main(int argc, char *argv[]) { ... }

См. раздел 5.1.2.2.1 стандарта C99.

J.3.2: СредаНабор имен среды и метод изменения списка среды, используемый getenv функция.

Флаги анализа используют getenv функция. Для этой функции необходимо знать список переменных среды и способ изменения списка.

См. раздел 7.20.4.5 стандарта C99.

J.3.6: Плавающая точкаПоведение округления, характеризующееся нестандартными значениями FLT_ROUNDS.

Анализ помечает включение float.h если значения FLT_ROUNDS находятся вне набора, {-1, 0, 1, 2, 3}. Только значения в этом наборе приводят к точно определенному поведению округления.

См. раздел 5.2.4.2.2 стандарта C99.

J.3.6: Плавающая точкаМетоды оценки, характеризующиеся нестандартными отрицательными значениями FLT_EVAL_METHOD.

Анализ помечает включение float.h если значения FLT_EVAL_METHOD находятся вне набора, {-1, 0, 1, 2}. Только значения в этом наборе приводят к четкому поведению операций с плавающей запятой.

См. раздел 5.2.4.2.2 стандарта C99.

J.3.6: Плавающая точкаНаправление округления при преобразовании целого числа в число с плавающей запятой, которое не может точно представлять исходное значение.

Анализ помечает преобразования из целых типов данных в типы данных с плавающей запятой меньшего размера (например, 64-разрядные int до 32-разрядной float).

См. раздел 6.3.1.4 стандарта C99.

J.3.6: Плавающая точкаНаправление округления при преобразовании числа с плавающей запятой в более узкое число с плавающей запятой.

Анализ помечает следующие преобразования:

  • double кому float

  • long double кому double или float

См. раздел 6.3.1.5 стандарта C99.

J.3.6: Плавающая точкаСостояние по умолчанию для FENV_ACCESS прагматика.

Анализ помечает использование прагматики, отличной от:

#pragma STDC FENV_ACCESS ON
или
#pragma STDC FENV_ACCESS OFF

См. раздел 7.6.1 стандарта C99.

J.3.6: Плавающая точкаСостояние по умолчанию для FP_CONTRACT прагматика.

Анализ помечает использование прагматики, отличной от:

#pragma STDC FP_CONTRACT ON
или
#pragma STDC FP_CONTRACT OFF

См. раздел 7.12.2 стандарта C99.

J.3.11: Директивы по предварительной обработкеПоведение каждой распознанной директивы, отличной от STDC # pragma.

Анализ помечает использование прагматики:

#pragma pp-tokens
где маркер обработки STDC не сразу следуетpragma. Например:
#pragma FENV_ACCESS ON

См. раздел 6.10.6 стандарта C99.

J.3.12: Функции библиотекиБудет ли feraiseexcept функция поднимает исключение с плавающей запятой «» неточное «» в дополнение к исключению с плавающей запятой «» переполнение «» или «» недостижение «».

Анализ помечает вызовы feraiseexcept функция.

См. раздел 7.6.2.3 стандарта C99.

J.3.12: Функции библиотекиСтроки, отличные от "C" и "" который может быть передан в качестве второго аргумента setlocale функция.

Анализ помечает вызовы setlocale функция, если ее второй аргумент не "C" или "".

См. раздел 7.11.1.1 стандарта C99.

J.3.12: Функции библиотекиТипы, определенные для float_t и double_t когда значение FLT_EVAL_METHOD макрос меньше 0 или больше 2.

Анализ помечает включение math.h если FLT_EVAL_METHOD имеет значения вне набора {0,1,2}.

См. раздел 7.12 стандарта C99.

J.3.12: Функции библиотекиЛогарифм базы-2 модуля, используемого remquo функции в уменьшении частного.

Анализ помечает вызовы remquo, remquof и remquol функция.

См. раздел 7.12.10.3 стандарта C99.

J.3.12: Функции библиотекиСостояние завершения, возвращенное среде хоста abort, exit, или _Exit функция.

Анализ помечает вызовы abort, exit, или _Exit функция.

См. разделы 7.20.4.1, 7.20.4.3 или 7.20.4.4 стандарта C99.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

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

Группа: Внедрение
Категория: Обязательно
Категория СМЖЛ: требуется
Представлен в R2017b