Partager via


C28139

avertissement C28139 : L’argument doit correspondre exactement au type

Informations supplémentaires

Certaines fonctions autorisent une arithmétique limitée sur le type d’argument, tandis que d’autres ne le font pas. Cela indique généralement qu’un formal d’énumération n’a pas été passé à un membre de l’énumération, mais peut également être utilisé pour d’autres types.

Une valeur énumérée dans un appel de fonction ne correspond pas au type spécifié pour le paramètre dans la déclaration de fonction. Cette erreur peut se produire lorsque les paramètres sont mal codés, manquants ou hors d’ordre. Étant donné que C permet d’utiliser indifféremment les valeurs énumérées et d’être utilisées indifféremment avec des constantes entières, il n’est pas rare de passer la valeur énumérée incorrecte à une fonction sans reconnaître l’erreur.

Si l’outil Analyse du code signale cette erreur, consultez la documentation de la fonction dans le WDK. Certaines fonctions sont codées pour autoriser uniquement les valeurs énumérées. D’autres autorisent l’opérateur ?: à sélectionner entre des valeurs de ce type, ou autorisent l’arithmétique sur les membres du type énuméré, par exemple lorsque les indicateurs de bits sont encodés en tant que valeur énumérée. Dans certains cas, les valeurs et constantes énumérées peuvent être combinées.

Exemple

L’exemple de code suivant déclenche cet avertissement.

....KeWaitForSingleObject(&MyMutex, UserRequest, UserRequest, false, NULL);

L’exemple de code suivant évite cet avertissement.

....KeWaitForSingleObject(&MyMutex, UserRequest, UserMode, false, NULL);