Partager via


Avertissement C6340

Incompatibilité de signature : 'type' passé en tant que Param(nombre) quand un type (signed|unsigned) est requis dans l’appel à 'nom-fonction'

Notes

Cet avertissement indique que la signature du type requis par le spécificateur de format et la signature du type de l’expression passée ne correspondent pas. L’utilisation du mauvais spécificateur de format est un comportement non défini. Pour corriger l’avertissement, assurez-vous que les spécificateurs de format correspondent aux types des expressions passées.

Nom de l’analyse du code : FORMAT_SIGN_MISMATCH

Exemple

#include <cstdio>

void f(unsigned char a)
{
    printf("%hhd\n", a); // C6340 emitted.
}

Il existe plusieurs façons de corriger le comportement non défini. Nous pouvons changer le spécificateur de format :

#include <cstdio>

void f(unsigned char a)
{
    printf("%hhu\n", a); // No C6340 emitted.
}

Nous pouvons changer le type de l’expression :

#include <cstdio>

void f(signed char a)
{
    printf("%hhd\n", a); // No C6340 emitted.
}

En dernier recours, lorsque le dépassement de capacité ne peut pas se produire, nous pouvons introduire un cast :

#include <cstdio>

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

Voir aussi

C6328