Любое определяемое реализацией поведение, от которого зависит выход программы, должно быть задокументировано и понято
Любое определяемое реализацией поведение, от которого зависит выход программы, должно быть задокументировано и понято.
Кодовая конструкция имеет поведение, определяемое реализацией, если стандарт C позволяет компиляторам выбирать собственные спецификации для конструкции. Полный перечень поведения, определяемого реализацией, содержится в приложении J.3 к стандарту ISO/IEC 9899:1999 (C99) и в приложении G.3 к стандарту ISO/IEC 9899:1990 (C90).
Если вы понимаете и документируете все поведение, определяемое реализацией, вы можете быть уверены, что все выходные данные вашей программы являются преднамеренными и не производятся случайно.
Анализ выявляет следующие возможности поведения, определяемого реализацией, в C99 и их аналогах в C90. Если вы знаете поведение реализации компилятора, оправдайте результат анализа соответствующими комментариями. Для обоснования результата присвойте один из следующих статусов: Justified, No action planned, или Not a defect.
Совет
Для массового выравнивания всех результатов, которые указывают на одно и то же поведение, определенное реализацией, используйте столбец Подробно (Detail) на панели Список результатов (Results List). Щелкните по заголовку столбца, чтобы сгруппировать все результаты с одной и той же записью. Выберите первый результат, а затем выберите последний результат при удержании Shift ключ. Присвойте статус одному из результатов. Если столбец подробных данных не отображается, щелкните правой кнопкой мыши любой другой заголовок столбца и включите этот столбец.
| C99 Стандартное приложение, док. | Поведение, которое необходимо задокументировать | Как Polyspace ® помогает |
|---|---|---|
| J.3.2: Среда | Альтернативный способ main может быть определена функция. |
Флаги анализа int main(void) { ... }int main(int argc, char *argv[]) { ... }См. раздел 5.1.2.2.1 стандарта C99. |
| J.3.2: Среда | Набор имен среды и метод изменения списка среды, используемый getenv функция. |
Флаги анализа используют См. раздел 7.20.4.5 стандарта C99. |
| J.3.6: Плавающая точка | Поведение округления, характеризующееся нестандартными значениями FLT_ROUNDS. |
Анализ помечает включение См. раздел 5.2.4.2.2 стандарта C99. |
| J.3.6: Плавающая точка | Методы оценки, характеризующиеся нестандартными отрицательными значениями FLT_EVAL_METHOD. |
Анализ помечает включение См. раздел 5.2.4.2.2 стандарта C99. |
| J.3.6: Плавающая точка | Направление округления при преобразовании целого числа в число с плавающей запятой, которое не может точно представлять исходное значение. |
Анализ помечает преобразования из целых типов данных в типы данных с плавающей запятой меньшего размера (например, 64-разрядные См. раздел 6.3.1.4 стандарта C99. |
| J.3.6: Плавающая точка | Направление округления при преобразовании числа с плавающей запятой в более узкое число с плавающей запятой. |
Анализ помечает следующие преобразования:
См. раздел 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 функция поднимает исключение с плавающей запятой «» неточное «» в дополнение к исключению с плавающей запятой «» переполнение «» или «» недостижение «». |
Анализ помечает вызовы См. раздел 7.6.2.3 стандарта C99. |
| J.3.12: Функции библиотеки | Строки, отличные от "C" и "" который может быть передан в качестве второго аргумента setlocale функция. |
Анализ помечает вызовы См. раздел 7.11.1.1 стандарта C99. |
| J.3.12: Функции библиотеки | Типы, определенные для float_t и double_t когда значение FLT_EVAL_METHOD макрос меньше 0 или больше 2. |
Анализ помечает включение См. раздел 7.12 стандарта C99. |
| J.3.12: Функции библиотеки | Логарифм базы-2 модуля, используемого remquo функции в уменьшении частного. |
Анализ помечает вызовы См. раздел 7.12.10.3 стандарта C99. |
| J.3.12: Функции библиотеки | Состояние завершения, возвращенное среде хоста abort, exit, или _Exit функция. |
Анализ помечает вызовы См. разделы 7.20.4.1, 7.20.4.3 или 7.20.4.4 стандарта C99. |
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Внедрение |
| Категория: Обязательно |
| Категория СМЖЛ: требуется |