Предупреждение C6328

Несоответствие размера: тип, передаваемый как Param(number), если тип требуется при вызове "function-name"

Замечания

Это предупреждение указывает, что тип, необходимый описателям формата, и тип переданного выражения не совпадает. Использование неправильного описателя формата является неопределенным поведением. Чтобы исправить предупреждение, убедитесь, что описатели формата соответствуют типам переданных выражений.

Имя анализа кода: FORMAT_SIZE_MISMATCH

Пример

#include <cstdio>

void f(long long a)
{
    printf("%d\n", a); // C6328 emitted.
}

Существует несколько способов устранения неопределенного поведения. Мы можем изменить описатель формата:

#include <cstdio>

void f(long long a)
{
    printf("%lld\n", a); // No C6328 emitted.
}

Мы можем изменить тип выражения:

#include <cstdio>

void f(int a)
{
    printf("%d\n", a); // No C6328 emitted.
}

Как последний курорт, когда переполнение не может произойти, мы можем ввести приведение:

#include <cstdio>

void f(unsigned char a)
{
    printf("%hhd\n", static_cast<signed char>(a)); // No C6328 emitted.
}

См. также

C6340