次の方法で共有


C6328

警告 C6328: <型> はパラメーター <数値> として渡されました。<型> は <関数> への呼び出しに必要です

is* で始まるルーチンで char 型の引数を渡すと、予測できない結果が発生する可能性があります。 たとえば、0x7F を越える値を持つ char 型の SBCS または MBCS のシングルバイト文字は負になります。 char が渡されると、コンパイラはその値を符号付き int または符号付き long に変換します。 この値は、コンパイラによって符号拡張されることがあり、予想外の結果になることがあります。 たとえば、isspace は int 型の引数を受け取りますが、その入力引数の有効な値の範囲は次のようになります。

0 <= c <= 255 に、特殊な値 EOF を加えます。

使用例

Visual C++ では、既定で char は signed 型です。そのため、char 型の変数の値の範囲は -128 <= c <= 127 です。 次のコードを使用するとします。

#include <iostream>

void f( )

{

char c = -37;

int retVal = isspace( c );

// code...

}

この場合、c は値 -37 の符号付き int に符号拡張されます。これは isspace の有効範囲外です。

この問題を解決するには、次のコードに示すように static_cast を使用します。

#include <iostream>

void f( )
{
   char c = -37;
   int retVal = isspace( static_cast<unsigned char> (c) );
   // code...
}

警告 C6328 の目的は、このバグをキャッチすることです。 7 ビットの ASCII 範囲にある文字の場合、このキャストは不要ですが、実行時にこの範囲の外に文字があると、アサートやクラッシュが発生します。