MISRA C:2012 Rule 21.13

Любое значение передало функции в <ctype.h> будет представимым как unsigned char или быть значением EOF

Описание

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

Любое значение передало функции в <ctype.h> будет представимым как unsigned char или быть значением EOF.

Это правило прибывает из MISRA C®: 2 012 Поправок 1.

Объяснение

Функции в <ctype.h> имейте четко определенное поведение только для int аргументы, значение которых в области значений unsigned char или отрицательная величина, эквивалентная из EOF. Использование других значений приводит к неопределенному поведению.

Реализация Polyspace

Polyspace® полагает, что отрицательная величина, эквивалентная из EOF, является-1 и не повышает нарушение, если вы передаете-1 в качестве аргумента к функции в ctype.h.

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

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

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

#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <ctype.h>

bool f(uint8_t a)
{
    return (isdigit((int32_t) a)           /* Compliant     */
            &&  isalpha((int32_t) 'b')      /* Compliant     */
            &&  islower(EOF)                /* Compliant     */
            &&  isalpha(256));              /* Non-compliant */
}

В этом примере правило нарушено когда 256, который не является ни одним unsigned char или значение EOF, передается как входной параметр isalpha функция.

Примечание

int броски в вышеупомянутом примере обязаны выполнять Правило 10.3.

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

Группа: Стандартные библиотеки
Категория: обязательный
Категория AGC: обязательный
Введенный в R2017a