Avertissement du compilateur (niveau 1) C4477

'function' : la chaîne de format 'string' nécessite un argument de type 'type', mais le numéro d’argument variadic a le type 'type'

Le compilateur a détecté une incompatibilité entre le type d’argument requis pour satisfaire l’espace réservé dans une chaîne de format et le type d’argument fourni. L’utilisation correcte des familles printf et scanf de fonctions variadiciques nécessite que vous fournissez des arguments des types spécifiés par la chaîne de format. Une incompatibilité signifie généralement qu’il existe un bogue dans votre code.

Pour plus d’informations sur les arguments associés aux espaces réservés de chaînes de format de famille printf, consultez la syntaxe de spécification de format : fonctions printf et wprintf. Consultez la documentation pour plus d’informations spécifiques à la fonction de fonction.

Cet avertissement est nouveau dans Visual Studio 2015.

Exemple

Cet exemple montre deux avertissements C4477 pour la première fonction printf_s, lorsque deux arguments sont trouvés comme étant du type incorrect, et montre également comment résoudre les problèmes.

// C4477p.cpp
// compile with: cl /c /W4 C4477p.cpp
#include <stdio.h>

void print_func(int a, float f)
{
    printf_s("This takes int and double arguments %d and %f.\n", f, a); // C4477, expected int then double
    printf_s("This takes int and double arguments %d and %f.\n", a, f); // fix: types in correct order
}

Dans le premier message d’erreur, le compilateur détecte qu’un double argument est fourni lorsqu’un int argument est attendu. A float est automatiquement double promu dans la liste d’arguments variadiciques. Le deuxième message d’erreur indique que le compilateur attendait un double argument, mais qu’un argument int a été fourni. Le compilateur ne peut pas indiquer que vous avez échangé l’ordre des arguments. Vous devez examiner la chaîne de format pour déterminer l’ordre d’argument réel et fournir les types d’arguments corrects.