Share via


C6328

경고 C6328:<type>이(가) 매개 변수 <number>(으)로 전달되었습니다. <function>에 대한 호출에는 <type>이(가) 필요합니다.

is*로 시작하는 루틴의 경우 char 형식의 인수를 전달하면 예기치 못한 결과가 발생할 수 있습니다. 예를 들어, 값이 0x7F보다 큰 char 형식의 SBCS 또는 MBCS 싱글바이트 문자는 음수입니다. 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은 특별히 이 버그를 찾아 내기 위한 것입니다. 7비트 ASCII 범위에 있는 문자의 경우 캐스팅이 불필요하지만 이 범위를 벗어난 문자로 인해 런타임에 어설션이나 충돌이 발생하게 됩니다.