exponenta event banner

MISRA C:2012 Правило 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 функция.

Примечание

int слепки в приведенном выше примере должны соответствовать правилу 10.3.

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

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