メインコンテンツ

MISRA C:2023 Rule 21.13

Any value passed to a function in <ctype.h> shall be representable as an unsigned char or be the value EOF

R2024a 以降

説明

ルール定義

Any value passed to a function in <ctype.h> shall be representable as an unsigned char or be the value EOF. 1

This rule comes from MISRA C™:2012 Amendment 1.

根拠

<ctype.h> に含まれる関数は、unsigned char の範囲内に収まる値か、EOF と等価な負の値をもつ int 引数に対してのみ動作が適切に定義されます。その他の値の使用は未定義の動作になります。

Polyspace 実装

Polyspace® では、-1 を EOF と等価な負の値と見なし、ctype.h の関数に引数として -1 を渡した場合、違反を報告しません。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

#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 */
}

この例では、unsigned char でも値 EOF でもない 256 が入力引数として関数 isalpha に渡されているため、ルールに違反します。

メモ

上記の例の int へのキャストは、ルール 10.3 に準拠する必要があります。

チェック情報

グループ: 標準ライブラリ
カテゴリ: Mandatory
AGC カテゴリ: Mandatory

バージョン履歴

R2024a で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.