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 /W4
de 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
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
. -
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 |