2013-07-31 9 views
9

伝統的に、signed charctype.hという述語に渡すエラーは-1から255までしか定義されていなかったため、-128から-2までは配列境界外の読み込みに終わることがありました。ctype.hにはまだunsigned charが必要ですか?

現代版のCでは未定義の動作を避けるため、この問題は修正されましたか、厳密にはunsigned charを使用する必要がありますか?

+0

最近のプログラムでは、128-255の範囲の文字に直面する可能性が高くなります。これは、符号付き文字として見れば否定的に解釈されるため、答えは「これまで以上」です。 –

答えて

11

厳密に言えば、現代版のCでは未定義の動作を避けるためにunsigned charを使用する必要がありますか?

はい、取り扱いC11 draft standard7.4キャラクタから<のctype.h>段落言う(強調鉱山):

ヘッダは、分類とマッピングのために有用ないくつかの機能を宣言する 文字。 198)すべての場合において、引数はintであり、その値はは で、符号なしcharとして表現可能であるか、マクロEOFの値と等しくなければならない。 引数にの値がある場合、その動作は定義されていません

draft C99 standardについても同様ですが、同じセクションで見つけることができます。

関連する問題