C6328
警告 C6328: サイズの不一致です: <型> が、呼び出しに機能するために < < 必要なときにパラメーターとして渡された <型> 番号 > >
ファミリ名 isxxx()の C ランタイム文字ベースのルーチンでは、char 型の引数を渡すと、予測できない結果になることがあります。たとえば、0x7F より大きい値の char 型の SBCS または MBCS のシングルバイト文字は負の値です。char が渡されると、コンパイラはその値を符号付き int または符号付き long に変換します。この値は、コンパイラによって符号拡張されることがあり、予想外の結果になることがあります。たとえば、isspace は int 型の引数を受け取りますが、その入力引数の有効な値の範囲は次のようになります。
特殊な値 EOFと0 <= c <= 255。
使用例
既定で、char は Visual C++ の 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 範囲の文字にキャストはプログラム エラー以前の範囲、予測できない結果になることがあります。不要または外側と終了文字ではありません。