MISRA C:2012 Rule 21.13

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

Описание

Определение правила

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

Это правило получено от MISRA C®: 2012 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 функция.

Примечание

The int приведения в приведенном выше примере требуются в соответствии с правилом 10.3.

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

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