Partager via


Avertissements du compilateur désactivés par défaut

Le compilateur prend en charge les avertissements désactivés par défaut, car la plupart des développeurs ne les trouvent pas utiles. Dans certains cas, ils avertissent d’un choix stylistique ou des idiomes courants dans le code plus ancien. D’autres avertissements concernent l’utilisation d’une extension Microsoft dans la langue. Certains avertissements indiquent une zone où les programmeurs effectuent souvent des hypothèses incorrectes, ce qui peut entraîner un comportement inattendu ou non défini. Si tous ces avertissements sont activés, certains d’entre eux peuvent apparaître plusieurs fois dans les en-têtes de bibliothèque. Les bibliothèques runtime C et les bibliothèques standard C++ sont destinées à émettre des avertissements uniquement au niveau /W4de l’avertissement.

Activer les avertissements désactivés par défaut

Vous pouvez activer les avertissements qui sont normalement désactivés par défaut à l’aide de l’une des options suivantes :

  • #pragma warning(default : warning_number )

    L’avertissement spécifié (warning_number) est activé au niveau par défaut. La documentation de l'avertissement contient le niveau par défaut de l'avertissement.

  • #pragma warning( : warning_level warning_number )

    L’avertissement spécifié (warning_number) est activé au niveau spécifié (warning_level).

  • /Wall

    /Wall active tous les avertissements qui sont désactivés par défaut. Si vous utilisez cette option, vous pouvez désactiver les avertissements individuels à l’aide de l’option /wd .

  • /wLnnnn

    Cette option active l’avertissement nnnn au niveau L.

Avertissements désactivés par défaut

Visual Studio 2015 et versions ultérieures

Les avertissements suivants sont désactivés par défaut dans Visual Studio 2015 et versions ultérieures :

Avertissement Message
C4061 (niveau 4) l’énumérateur 'identifier' dans un commutateur d’énumération 'énumération' n’est pas géré explicitement par une étiquette de casse.
C4062 (niveau 4) l’énumérateur 'identifier' dans un commutateur d’énumération 'énumération' n’est pas géré.
C4165 (niveau 1) 'HRESULT' est converti en 'bool' ; êtes-vous sûr que c’est ce que vous voulez ?
C4191 (niveau 3) 'operator' : conversion non sécurisée de 'type_of_expression' en 'type_required'
C4242 (niveau 4) « identificateur » : conversion de « type1 » en « type2 », perte possible de données
C4254 (niveau 4) 'operator' : conversion de 'type1' en 'type2', perte possible de données
C4255 (niveau 4) « fonction » : aucun prototype de fonction fourni : conversion de '()' en '(void)'
C4263 (niveau 4) « fonction » : une fonction membre ne se substitue à aucune fonction membre virtuelle de classe de base
C4264 (niveau 1) 'virtual_function' : aucune substitution disponible pour la fonction membre virtuelle à partir de la base 'classe' ; est masquée
C4265 (niveau 3) 'class' : la classe a des fonctions virtuelles, mais le destructeur n’est pas virtuel
C4266 (niveau 4) 'function' : aucune substitution disponible pour la fonction membre virtuelle à partir de la base 'type' ; la fonction est masquée
C4287 (niveau 3) « opérateur » : constantes non signées/négatives incompatibles
C4289 (niveau 4) extension non standard utilisée : 'var' : variable de contrôle de boucle déclarée dans la boucle for-loop est utilisée en dehors de l’étendue de la boucle for
C4296 (niveau 4) 'operator' : l’expression est toujours false
C4339 (niveau 4) 'type' : l’utilisation d’un type non défini détecté dans les métadonnées CLR - l’utilisation de ce type peut entraîner une exception d’exécution
C4342 (niveau 1) modification de comportement : « fonction » appelé, mais un opérateur de membre a été appelé dans les versions précédentes
C4350 (niveau 1) changement de comportement : : « membre1 » appelé à la place de « membre2 »
C4355 'this' : utilisé dans la liste des initialiseurs membre de base
C4365 (niveau 4) 'action' : conversion de 'type_1' en 'type_2', signé/non signé non signé
C4370 (niveau 3) la disposition de classe a été modifiée à partir d'une version précédente du compilateur en raison d'une meilleure compression
C4371 (niveau 3) 'class-name' : la disposition de la classe peut avoir changé à partir d’une version précédente du compilateur en raison d’un meilleur empaquetage du membre 'member'
C4388 (niveau 4) incompatibilité signed/unsigned
C4412 (niveau 2) 'function' : la signature de fonction contient le type 'type' ; Les objets C++ ne sont pas sécurisés pour passer entre du code pur et du code mixte ou natif
C4426 (niveau 1) Les indicateurs d’optimisation modifiés après l’ajout de l’en-tête peuvent être dus à #pragma optimize() 14.1
C4435 (niveau 4) 'class1' : la disposition de l’objet sous /vd2 change en raison de la base virtuelle 'class2'.
C4437 (niveau 4) dynamic_cast de base virtuelle « class1 » à « class2 » peut échouer dans certains contextes.
C4444 (niveau 3) le niveau supérieur « __unaligned » n’est pas implémenté dans ce contexte.
C4464 (niveau 4) le chemin include relatif contient « .. »
C4471 (niveau 4) une déclaration de transfert d’une énumération non portée doit avoir un type sous-jacent (int assume) Perm
C4472 (niveau 1) 'identifier' est une énumération native : ajouter un spécificateur d’accès (privé/public) pour déclarer une énumération managée
C4514 (niveau 4) « function » : la fonction inline non référencée a été supprimée
C4536 (niveau 4) 'nom de type' : le nom de type dépasse la limite des métadonnées de caractères 'limit'
C4545 (niveau 1) l’expression avant la virgule correspond à une fonction qui n’a pas de liste d’arguments
C4546 (niveau 1) l’appel de fonction avant la virgule n’a pas de liste d’arguments
C4547 (niveau 1) « operator » : l'opérateur avant la virgule n'a pas d'effet; opérateur avec effet secondaire attendu
C4548 (niveau 1) l'expression avant la virgule n'a pas d'effet ; expression avec effet secondaire attendu
C4549 (niveau 1) 'operator1' : opérateur avant que la virgule n’ait aucun effet ; avez-vous l’intention 'operator2' ?
C4555 (niveau 1) l'expression n'a pas d'effet ; attendue expression avec effets secondaires
C4557 (niveau 3) « __assume » contient l'effet « effect »
C4571 (niveau 4) informational : capture(...) sémantiques modifiées depuis Visual C++ 7.1 ; Les exceptions structurées (SEH) ne sont plus interceptées
C4574 (niveau 4) 'identificateur' est défini sur '0' : avez-vous voulu utiliser '#if identificateur' ?
C4577 ( niveau 1) 'noexcept' utilisé sans mode de gestion des exceptions spécifié ; l’arrêt à l’exception n’est pas garanti. Spécifier /EHsc
C4582 (niveau 4) « type » : le constructeur n'est pas appelé de manière implicite
C4583 (niveau 4) « type » : le destructeur n’est pas appelé de manière implicite
C4587 (niveau 1) « anonymous_structure » : changement de comportement : le constructeur n'est plus appelé de manière implicite
C4588 (niveau 1) « anonymous_structure » : changement de comportement : le destructeur n'est plus appelé de manière implicite
C4596 (niveau 4) 'identificateur' : nom qualifié illégal dans la déclaration de membre 14.3 Perm
C4598 (niveau 1 et niveau 3) '#include 'header'' : le numéro d’en-tête dans l’en-tête précompilé ne correspond pas à la compilation actuelle à cette position 14.3
C4599 (niveau 3) 'chemin d’option' : numéro d’argument de ligne de commande arg_number ne correspond pas à l’en-tête précompilé 14.3
C4605 (niveau 1) « /Dmacro » a été spécifié sur la ligne de commande actuelle, mais n'a pas été spécifié quand l'en-tête précompilé a été généré
C4608 (niveau 3) 'union_member' a déjà été initialisé par un autre membre de l’union dans la liste des initialiseurs, 'union_member' Perm
C4619 (niveau 3) #pragma avertissement : il n’existe aucun numéro d’avertissement 'number'
C4623 (niveau 4) 'classe dérivée' : le constructeur par défaut n'a pas pu être généré parce que le constructeur par défaut de la classe de base est inaccessible
C4625 (niveau 4) 'classe dérivée' : le constructeur de copie n'a pas pu être généré parce qu'un constructeur de copie de la classe de base est inaccessible
C4626 (niveau 4) 'classe dérivée' : l'opérateur d'assignation n'a pas pu être généré parce qu'un opérateur d'assignation de la classe de base est inaccessible
C4628 (niveau 1) digrammes non pris en charge avec -Ze. Séquence de caractères 'digraph' non interprétée comme un autre jeton pour 'char'
C4640 (niveau 3) 'instance' : la construction d’un objet statique local n’est pas thread-safe
C4643 (niveau 4) La déclaration anticipée « identificateur » dans l’espace de noms std n’est pas autorisée par la norme C++. 15.8
C4647 (niveau 3) changement de comportement : __is_pod(type) a une valeur différente dans les versions précédentes
C4654 (niveau 4) Le code placé avant l'insertion d'une ligne d'en-tête précompilé sera ignoré. Ajoutez du code à l’en-tête précompilé. 14.1
C4668 (niveau 4) 'symbol' n’est pas défini comme une macro de préprocesseur, en remplaçant par '0' pour 'directives'
C4682 (niveau 4) 'symbol' : aucun attribut de paramètre directionnel spécifié, valeur par défaut [in]
C4686 (niveau 3) « type défini par l’utilisateur » : modification possible du comportement, modification de la convention d’appel de retour UDT
C4692 (niveau 1) 'function' : la signature d’un membre non privé contient le type natif privé d’assembly 'native_type'
C4710 (niveau 4) 'function' : function not inlined
C4738 (niveau 3) stockage de résultat flottant 32 bits en mémoire, perte possible de performances
C4746 l'accès volatile de « expression » dépend du paramètre /volatile:<iso|ms> ; envisagez d'utiliser les fonctions intrinsèques __iso_volatile_load/store
C4749 (niveau 4) prise en charge conditionnelle : offesetof appliqué au type de disposition non standard « type »
C4767 (niveau 4) le nom de section 'symbol' est supérieur à 8 caractères et sera tronqué par l’éditeur de liens
C4774 (niveau 4) « chaîne » : la chaîne de format attendue dans l'argument nombre n'est pas un littéral de chaîne
C4777 (niveau 4) « function » : la chaîne de format « chaîne » requiert un argument de type « type1 », mais l’argument variadique nombre présente le type « type2 »
C4786 (niveau 3) 'symbol' : le nom de l’objet a été tronqué en caractères 'nombre' dans les informations de débogage
C4800 (niveau 4) Conversion implicite de 'type' en bool. Perte d’informations possible 16.0
C4820 (niveau 4) « octets » octets de remplissage ajoutés après construction « nom_membre »
C4822 (niveau 1) 'member' : la fonction membre de classe locale n’a pas de corps
C4826 (niveau 2) La conversion de « type1 » en « type2» est de type signe étendu. Cela peut provoquer un comportement inattendu au moment de l'exécution.
C4837 (niveau 4) trigraphe détecté : « ??caractère » remplacé par «caractère »
C4841 (niveau 4) extension non standard utilisée : indicateur de membre composé utilisé dans offsetof
C4842 (niveau 4) le résultat de « offsetof » appliqué à un type utilisant l’héritage multiple n’est pas garanti pour être cohérent entre les versions du compilateur
C4866 (niveau 4) Le compilateur 'file(line-number)' peut ne pas appliquer l’ordre d’évaluation de gauche à droite pour l’appel à l’opérateur
C4868 (niveau 4) « fichier (numéro_ligne) » : le compilateur ne peut pas appliquer l'ordre d'évaluation de gauche à droite dans une liste d'initialisation entre accolades
C4905 (niveau 1) cast de littéral de chaîne étendu en 'LPSTR'
C4906 (niveau 1) cast de littéral de chaîne en 'LPWSTR'
C4917 (niveau 1) 'declarator' : un GUID ne peut être associé qu’à une classe, une interface ou un espace de noms
C4928 (niveau 1) initialisation de copie non conforme ; plusieurs conversions définies par l'utilisateur ont été appliquées implicitement
C4931 (niveau 4) bibliothèque de types présumée construite pour des pointeurs « nombre » bits
C4946 (niveau 1) reinterpret_cast utilisé entre les classes associées : 'class1' et 'class2'
C4962 'function' : optimisations guidées par profil désactivées, car les optimisations ont provoqué l’incohérence des données de profil
C4986 (niveau 4) 'symbol' : la spécification d’exception ne correspond pas à la déclaration précédente
C4987 (niveau 4) extension non standard utilisée : 'throw (...)'
C4988 (niveau 4) 'symbol' : variable déclarée en dehors de la classe/de la portée de la fonction
C5022 « Type» : plusieurs constructeurs de déplacement spécifiés
C5023 « Type» : plusieurs opérateurs d'assignation de déplacement spécifiés
C5024 (niveau 4) « Type» : le constructeur de déplacement a été implicitement défini comme supprimé
C5025 (niveau 4) « Type» : l'opérateur d'assignation de déplacement a été implicitement défini comme supprimé
C5026 (niveau 1 et niveau 4) « Type» : le constructeur de déplacement a été implicitement défini comme supprimé
C5027 (niveau 1 et niveau 4) « Type» : l'opérateur d'assignation de déplacement a été implicitement défini comme supprimé
C5029 (niveau 4) extension non standard utilisée : les attributs d'alignement en C++ s'appliquent uniquement aux variables, aux membres de données et aux types de balises
C5031 (niveau 4) #pragma avertissement(pop) : incompatibilité probable, état d’avertissement de pavage envoyé dans un autre fichier 14.1
C5032 (niveau 4) détecté #pragma warning(push) sans avertissement(pop) #pragma correspondant 14.1

Visual Studio 2017 et versions ultérieures

Les avertissements suivants sont désactivés par défaut dans Visual Studio 2017 et versions ultérieures :

Avertissement Message
C5034 l’utilisation de l’intrinsèque « intrinsèque » entraîne la compilation du nom de fonction en tant que code invité 15.3
C5035 l’utilisation de la fonctionnalité « fonctionnalité » entraîne la compilation du nom de la fonction en tant que code invité 15.3
C5036 (niveau 1) conversion du pointeur de fonction varargs lors de la compilation avec /hybrid :x86arm64 'type1' en 'type2' 15.3
C5038 (niveau 4) le membre de données 'member1' est initialisé après le membre de données 'member2' 15.3
C5039 (niveau 4) 'function' : pointeur ou référence à la fonction potentiellement levée passée à la fonction C extern sous -EHc. Un comportement non défini peut se produire si cette fonction lève une exception. 15.5
C5041 (niveau 4) 'member-name' : définition hors ligne pour le membre de données statique constexpr n’est pas nécessaire et est déconseillé en C++17. 15.2
C5042 (niveau 3) 'function' : les déclarations de fonction au niveau de l’étendue de bloc ne peuvent pas être spécifiées 'inline' dans la norme C++ ; supprimer le spécificateur 'inline' 15.5
C5045 Le compilateur insère l’atténuation de Spectre pour la charge de mémoire si le commutateur /Qspectre spécifié 15.7

Visual Studio 2019 et versions ultérieures

Les avertissements suivants sont désactivés par défaut dans Visual Studio 2019 et versions ultérieures :

Avertissement Message
C5052 (niveau 3) Le mot clé 'keyword-name' a été introduit dans la version C++ et nécessite l’utilisation de l’option de ligne de commande 'option' 16.1
C5204 (niveau 3) Une classe avec des fonctions virtuelles a un destructeur non virtuel trivial. 16.5
C5214 (niveau 4) l’application de « mot clé » à un opérande avec un type qualifié volatile est déconseillée en C++20 16.7
C5215 (niveau 4) 'function-parameter' un paramètre de fonction avec un type qualifié volatile est déconseillé en C++20 16.7
C5216 (niveau 4) 'return-type' un type de retour qualifié volatile est déconseillé en C++20 16.7
C5217 (niveau 4) une déclaration de liaison structurée qui inclut volatile est déconseillée dans C++20 16.7
C5219 (niveau 2) conversion implicite de « type-1 » en « type-2 », perte possible de données 16.7
C5220 (niveau 4) 'member' : un membre de données non statique avec un type qualifié volatile n’implique plus que
les constructeurs de copie/déplacement générés par le compilateur et les opérateurs d’affectation de copie/déplacement ne sont pas trivials 16.7
C5233 (niveau 4) la capture lambda explicite 'identifier' n’est pas utilisée 16.10
C5240 (niveau 4) 'attribute-name' : l’attribut est ignoré dans cette position syntaxique 16.10
C5243 (niveau 1) 'type-name' : l’utilisation de la classe incomplète 'class-name' peut entraîner une violation potentielle d’une règle de définition en raison de la limitation ABI 16.10
C5245 (niveau 4) « function » : la fonction non référencée avec liaison interne a été supprimée
C5246 (niveau 1) 'member' : l’initialisation d’un sous-objet doit être encapsulée dans les accolades 16.10
C5247 (niveau 1) La section « section-name » est réservée à l’initialisation dynamique C++. La création manuelle de la section interfère avec l’initialisation dynamique C++ et peut entraîner un comportement non défini 16.11
C5248 (niveau 1) La section « section-name » est réservée à l’initialisation dynamique C++. La variable placée manuellement dans la section peut être optimisée et son ordre relatif aux initialiseurs dynamiques générés par le compilateur n’est pas spécifié 16.11

Visual Studio 2022 et versions ultérieures

Les avertissements suivants sont désactivés par défaut dans Visual Studio 2022 et versions ultérieures :

Avertissement Message
C5249 (niveau 1) « bitfield » de type « enumeration_name » a nommé des énumérateurs avec des valeurs qui ne peuvent pas être représentées dans la largeur de champ de bits donnée de « bitfield_width ». 17.0
C5250 (niveau 3) « function_name » : fonction intrinsèque non déclarée. 17.0
C5251 (niveau 4) segment-name modifié après avoir inclus l’en-tête 17.1
C5254 (niveau 4) La fonctionnalité de langage 'terse static assert' nécessite l’indicateur du compilateur '/std :c++17' 17.1
C5256 (niveau 1) 'énumération' : une déclaration non définissante d’une énumération avec un type sous-jacent fixe n’est autorisée qu’en tant que déclaration autonome 17.2
C5258 (niveau 4) la capture explicite de « symbole » n’est pas requise pour cette utilisation 17.2
C5259 (niveau 4) 'specialized-type' : la spécialisation explicite nécessite 'template <>' 17.3
C5262 (niveau 1, erreur) la chute implicite se produit ici ; manquez-vous une break déclaration ? Utiliser [[fallthrough]] lorsqu’une break instruction est intentionnellement omise entre les cas 17.4
C5263 (niveau 4) appeler 'std::move' sur un objet temporaire empêche l’elision de copie 17.4
C5264 (niveau 4) 'variable-name' : la variable 'const' n’est pas utilisée 17.4
C5266 (niveau 4) Le qualificateur 'const' sur le type de retour n’a aucun effet 17.6
C5267 (niveau 4) la définition de constructeur/d’affectation de copie implicite pour 'type' est déconseillée, car elle a un opérateur d’affectation fourni par l’utilisateur/constructeur de copie 17.7

14.1 Cet avertissement est disponible à partir de Visual Studio 2015 Update 1.
14.3 Cet avertissement est disponible à partir de Visual Studio 2015 Update 3.
15.2 Cet avertissement est disponible à partir de Visual Studio 2017 version 15.2.
15.3 Cet avertissement est disponible à partir de Visual Studio 2017 version 15.3.
15.5 Cet avertissement est disponible à partir de Visual Studio 2017 version 15.5.
15.7 Cet avertissement est disponible à partir de Visual Studio 2017 version 15.7.
15.8 Cet avertissement est disponible à partir de Visual Studio 2017 version 15.8.
16.0 Cet avertissement est disponible à partir de Visual Studio 2019 RTM.
16.5 Cet avertissement est disponible à partir de Visual Studio 2019 version 16.5.
16.7 Cet avertissement est disponible à partir de Visual Studio 2019 version 16.7.
16.10 Cet avertissement est disponible à partir de Visual Studio 2019 version 16.10.
16.11 Cet avertissement est disponible à partir de Visual Studio 2019 version 16.11.
17.0 Cet avertissement est disponible à partir de Visual Studio 2022 version 17.0.
17.1 Cet avertissement est disponible à partir de Visual Studio 2022 version 17.1.
17.2 Cet avertissement est disponible à partir de Visual Studio 2022 version 17.2.
17.3 Cet avertissement est disponible à partir de Visual Studio 2022 version 17.3.
17.4 Cet avertissement est disponible à partir de Visual Studio 2022 version 17.4.
17.5 Cet avertissement est disponible à partir de Visual Studio 2022 version 17.5.
17.6 Cet avertissement est disponible à partir de Visual Studio 2022 version 17.6.
17.7 Cet avertissement est disponible à partir de Visual Studio 2022 version 17.7.
Perm Cet avertissement est désactivé, sauf si l’option du /permissive- compilateur est définie.

Avertissements désactivés par défaut dans les versions antérieures

Cet avertissement a été désactivé par défaut dans Visual Studio 2015 version 15.3 et activé dans Visual Studio 2015 version 15.5 :

Avertissement Message
C4768 __declspec attributs avant que la spécification de liaison ne soit ignorée

Ces avertissements étaient désactivés par défaut dans les versions du compilateur avant Visual Studio 2015 :

Avertissement Message
C4302 (niveau 2) « conversion » : troncation de « type1 » en « type2 »
C4311 (niveau 1) 'variable' : troncation du pointeur de 'type' vers 'type'
C4312 (niveau 1) « opération »: la conversion de « type1 » en « type2 » d'une taille supérieure
C4319 (niveau 1) « opérateur » : zero extension « type1 » à « type2 » de plus grande taille

Cet avertissement a été désactivé par défaut dans les versions du compilateur avant Visual Studio 2012 :

Avertissement Message
C4431 (niveau 4) spécificateur de type manquant - int est pris en compte par défaut. Remarque : C ne prend plus en charge int par défaut

Voir aussi

Pragma warning