Любое определяемое реализацией поведение, от которого зависит выход программы, должно быть задокументировано и понято
Любое определяемое реализацией поведение, от которого зависит выход программы, должно быть задокументировано и понято.
Конструкция кода имеет поведение, определяемое реализацией, если стандарт 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
ключ. Присвойте статус одному из результатов. Если Вы не видите Detail столбец, щелкните правой кнопкой мыши по любому другому заголовку столбца и позвольте этот столбец.
C99 стандартное приложение Ref | Документируемое поведение | Как 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 стандарта. |
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Реализация |
Категория: Требуемая |
Категория AGC: Требуется |