C6328

警告 C6328:尺寸不匹配 <type> 作为参数 < number> 传递,而需要使用 < type > 调用 <function>

对于 C 运行时。基于字符名称 isxxx()的例程,传递类型为 char 的参数可能不可预知的结果。例如,如果类型为 char 的 SBCS 或 MBCS 单字节字符的值大于 0x7F,则该值为负值。如果传递了一个 char,则编译器可能将该值转换为一个有符号的 int 或一个有符号的 long。编译器可能对该值进行符号扩展,从而产生意外的结果。例如,isspace 接受一个类型为 int 的参数;然而,其输入参数的值的有效范围是:

0 <= c <= 255,加上特殊值 EOF。

示例

默认情况下,char 在 Visual C++ 中为有符号类型,所以 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 专门用来捕获此 bug。对于 7 位 ASCII 范围的字符转换是范围可以具有不可预知的结果,但是字符的不必要,外部,直到并包括程序错误和终止。