ホームページ > バックエンド開発 > C++ > `toupper()`、`to lower()`などを使用する前に、`unsigned char`にキャストする必要がありますか?

`toupper()`、`to lower()`などを使用する前に、`unsigned char`にキャストする必要がありますか?

Linda Hamilton
リリース: 2024-12-26 19:15:12
オリジナル
750 人が閲覧しました

Should I Cast to `unsigned char` Before Using `toupper()`, `tolower()`, etc.?

toupper()、to lower() などを呼び出す前に、unsigned Char にキャストする必要がありますか?

この質問は、unsigned へのキャストが適切であるという提案から生じています。 char は、 std::toupper や std::to lower などの文字操作関数を呼び出す前に必要です。ただし、Bjarne Stroustrup のコードは、これらの関数をキャストせずに使用しているようです。

Char Representation

Char、signed char、および unsigned char は、 C では異なる型です。 Char は、signed char または unsigned char と同等の範囲を表すことができます。 char が署名されるシステムでは、文字セット全体が負ではない値を持ちます。

toupper 関数

C 標準によれば、toupper は int 引数を受け入れ、戻り値を返します。 int の結果。入力値は unsigned char として表現できるか、EOF に等しい必要があります。そうでない場合、動作は未定義です。

未定義の動作

プレーン char が署名され、toupper に渡される値が負の場合、未定義の動作が発生します。これは、int への暗黙的な変換によって負の値が生成されるためです。

Unsigned Char へのキャスト

char 引数を unsigned char にキャストすると、値が負でないことが保証されます。 、未定義の動作を回避します。 char と unsigned char は同じサイズであっても、異なる値の範囲を表します。

実装

これらの関数は通常、ルックアップ テーブルを使用して実装されます。テーブルの境界を超えてインデックスを作成すると、未定義の動作が発生する可能性があります。結果が暗黙的に負の値に戻される場合、unsigned char に直接変換しても、この問題は回避できません。

例外: EOF

EOF (-1) を引数として受け入れる必要があります。この値は unsigned char として表現できませんが、それを処理するには toupper が必要です。

C の変更

C 標準は特定の C 標準ライブラリ関数のみを変更します。の機能の調整は行われていません。 .

結論

未定義の動作を回避するには、toupper、tower などを呼び出す前に char 引数を unsigned char にキャストする必要があります。 char が非負の符号付き型であっても関数を使用できます。

以上が`toupper()`、`to lower()`などを使用する前に、`unsigned char`にキャストする必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート