Avertissement du compilateur (niveau 1) C4477
« function » : la chaîne de format « string » requiert un argument de type « type » mais l’argument variadique number 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.