C6328
предупреждение C6328: Несоответствие размера. объект <type> в качестве параметра <number>, если <type> является обязательным при вызове функции <function>
Для процедур среды выполнения C символьно-ориентированных в фамилии isxxx() при передаче аргумента типа char может иметь непредсказуемые результаты.Например, символ однобайтовой кодировки и MBCS однобайтовый типа char со значением 0x7F больше, чем отрицательное значение.Если передается значение типа char, компилятор может преобразовать это значение в значение типа int со знаком или типа long со знаком.Данное значение может быть расширено знаком компилятором, что приведет к непредвиденным результатам.Например, функция isspace принимает аргумент типа int; однако допустимые значения этого входного аргумента должны находиться в следующем диапазоне:
0 <= c <= 255(плюс особое значение EOF.
Пример
По умолчанию char тип со знаком в Visual C#, C-++, поэтому диапазон значений char переменной типа -128 <= c <= 127.Поэтому при реализации следующего кода:
#include <iostream>
void f( )
{
char c = -37;
int retVal = isspace( c );
// code ...
}
переменная c будет расширена знаком и приведена к учитывающему знак типу int со значением -37, которое находится за пределами допустимого диапазона функции isspace.
Чтобы устранить эту проблему, можно использовать static_cast, как показано в следующем коде:
#include <iostream>
void f( )
{
char c = -37;
int retVal = isspace( static_cast<unsigned char> (c) );
// code ...
}
Предупреждение C6328 специально предназначено для обнаружения этой ошибки.Для символов в 7 7-битовом диапазоне ASCII в диапазоне приведение без лишних, но диапазон символов, может иметь непредсказуемые результаты вплоть до и включение ошибку и завершение программы.