Advertencias del compilador desactivadas de forma predeterminada
El compilador admite advertencias que están desactivadas de forma predeterminada, porque la mayoría de los desarrolladores no las encuentran útiles. En algunos casos, advierten sobre una opción estilística o sobre expresiones comunes en código antiguo. Otras advertencias son sobre el uso de una extensión de Microsoft en el lenguaje. Algunas advertencias indican un área en la que los programadores suelen realizar suposiciones incorrectas, lo que puede provocar un comportamiento inesperado o indefinido. Si todas estas advertencias están habilitadas, algunas de ellas pueden aparecer muchas veces en los encabezados de la biblioteca. Las bibliotecas en tiempo de ejecución de C y las bibliotecas estándar de C++ están diseñadas para no emitir ninguna advertencia solo en el nivel de advertencia /W4
.
Habilitación de advertencias desactivadas de manera predeterminada
Puede habilitar las advertencias que normalmente están desactivadas de manera predeterminada mediante una de las opciones siguientes:
#pragma warning(default :
warning_number)
La advertencia especificada (warning_number) está habilitada en su nivel predeterminado. La documentación de la advertencia contiene el nivel predeterminado de la advertencia.
#pragma warning(
:
warning_level warning_number)
La advertencia especificada (warning_number) está habilitada en el nivel especificado (warning_level).
-
/Wall
habilita todas las advertencias que están desactivadas de forma predeterminada. Si usa esta opción, puede desactivar las advertencias individuales mediante la opción/wd
. -
Esta opción habilita la advertencia nnnn en el nivel L.
Advertencias desactivadas de manera predeterminada
Visual Studio 2015 y versiones posteriores
Las advertencias siguientes están desactivadas de manera predeterminada en Visual Studio 2015 y versiones posteriores:
Advertencia | Mensaje |
---|---|
C4061 (nivel 4) | El enumerador 'identifier' en un modificador de enumeración 'enumeration' no se controla explícitamente mediante una etiqueta case. |
C4062 (nivel 4) | El enumerador 'identifier' en un modificador de enumeración 'enumeration' no se controla. |
C4165 (nivel 1) | "HRESULT" se está convirtiendo en "bool"; ¿está seguro que quiere realizar esta operación? |
C4191 (nivel 3) | "operator": conversión no segura de "type_of_expression" a "type_required" |
C4242 (nivel 4) | "identifier": conversión de "type1" a "type2", posible pérdida de datos |
C4254 (nivel 4) | "operator": conversión de "type1" a "type2", posible pérdida de datos |
C4255 (nivel 4) | "function" : no se ha proporcionado un prototipo de función: convirtiendo "()" a "(void)" |
C4263 (nivel 4) | 'function': la función miembro no invalida ninguna función miembro virtual de clase base |
C4264 (nivel 1) | "virtual_function": no hay ningún reemplazo disponible para la función miembro virtual desde "class" base; la función está oculta |
C4265 (nivel 3) | "class": la clase tiene funciones virtuales, pero el destructor no es virtual |
C4266 (nivel 4) | "function": no hay un reemplazo disponible para la función miembro virtual de la base "type"; la función está oculta |
C4287 (nivel 3) | "operator": no coinciden las constantes sin signo o negativas |
C4289 (nivel 4) | se ha utilizado una extensión no estándar: "var" : la variable de control de bucles declarada en el bucle For se utiliza fuera del ámbito del bucle For |
C4296 (nivel 4) | "operator": la expresión siempre es false |
C4339 (nivel 4) | "type": se detectó el uso de un tipo no definido en los metadatos CLR; el uso de este tipo puede provocar una excepción en tiempo de ejecución |
C4342 (nivel 1) | cambio de comportamiento: se llamó a "function", pero en versiones anteriores se llamaba a un operador de miembro |
C4350 (nivel 1) | cambio de comportamiento: se llamó a 'member1' en lugar de a 'member2' |
C4355 | 'this': utilizado en la lista de inicializadores de miembro base |
C4365 (nivel 4) | "action": conversión de "type_1" a "type_2", no coinciden signed/unsigned |
C4370 (nivel 3) | el diseño de clase cambió desde una versión anterior del compilador debido a una mejora del empaquetado |
C4371 (nivel 3) | 'class-name': el diseño de la clase puede haber cambiado de una versión anterior del compilador debido a un mejor empaquetado del miembro 'member' |
C4388 (nivel 4) | no coinciden signed/unsigned |
C4412 (nivel 2) | "function": la signatura de función contiene el tipo "type"; no es seguro pasar los objetos de C++ entre código puro y mixto o nativo. |
C4426 (nivel 1) | se han cambiado los marcadores de optimización después de incluir el encabezado; puede deberse a #pragma optimize() 14.1 |
C4435 (nivel 4) | 'class1': el diseño de objeto en /vd2 cambiará debido a la base virtual 'class2'. |
C4437 (nivel 4) | dynamic_cast de la base virtual 'class1' a 'class2' podría producir un error en algunos contextos. |
C4444 (nivel 3) | el nivel superior "__unaligned" no se implementa en este contexto. |
C4464 (nivel 4) | la ruta de acceso de inclusión relativa contiene ".." |
C4471 (nivel 4) | una declaración adelantada de una enumeración sin ámbito debe tener un tipo subyacente (se presupone int) Perm |
C4472 (nivel 1) | "identifier" es una enumeración nativa: agregue un especificador de acceso (privado/público) para declarar una enumeración administrada |
C4514 (nivel 4) | "function": se quitó la función insertada a la que no se hace referencia |
C4536 (nivel 4) | "type name": el nombre de tipo supera el límite de metadatos en "limit" caracteres |
C4545 (nivel 1) | la expresión antes de la coma se evalúa como una función a la que le falta una lista de argumentos |
C4546 (nivel 1) | falta la lista de argumentos de la llamada de función antes de la coma |
C4547 (nivel 1) | "operator": un operador antes de una coma no tiene ningún efecto; se esperaba un operador con efectos secundarios |
C4548 (nivel 1) | la expresión antes de la coma no tiene ningún efecto; se esperaba una expresión con efectos secundarios |
C4549 (nivel 1) | "operator1": un operador antes de una coma no tiene ningún efecto; ¿quiso decir "operator2"? |
C4555 (nivel 1) | la expresión no tiene efecto; se esperaba una expresión con efecto secundario |
C4557 (nivel 3) | "__assume" contiene el efecto "effect" |
C4571 (nivel 4) | información: la semántica de catch(...) cambió desde Visual C++ 7.1; ya no se detectan excepciones estructuradas (SEH) |
C4574 (nivel 4) | "Identifier" se definió como "0": ¿pretendía usar "#if identifier"? |
C4577 (nivel 1) | "noexcept " se usa sin ningún modo de control de excepciones especificado; no se garantiza la terminación en la excepción. Especifique /EHsc . |
C4582 (nivel 4) | "type": no se llama al constructor implícitamente |
C4583 (nivel 4) | "type": no se llama al destructor implícitamente |
C4587 (nivel 1) | "anonymous_structure": cambio de comportamiento: ya no se llama al constructor implícitamente |
C4588 (nivel 1) | "anonymous_structure": cambio de comportamiento: ya no se llama al destructor implícitamente |
C4596 (nivel 4) | 'identifier': nombre completo no válido en la declaración de miembro 14.3 Perm |
C4598 (nivel 1 y nivel 3) | "#include 'header'": número de encabezado header-number en el encabezado precompilado no coincide con la compilación actual en esa posición 14.3 |
C4599 (nivel 3) | 'option path': el número de argumento de la línea de comandos arg_number no coincide con el encabezado precompilado 14.3 |
C4605 (nivel 1) | Se especificó "/Dmacro" en la línea de comandos actual, pero no se especificó al compilar el encabezado precompilado |
C4608 (nivel 3) | "union_member" ya ha sido inicializado por otro miembro de unión en la lista de inicializadores, "union_member" Perm |
C4619 (nivel 3) | #pragma warning: no existe el número de advertencia "number" |
C4623 (nivel 4) | 'clase derivada': no se puede generar el constructor predeterminado porque no se puede obtener acceso a un constructor predeterminado de clase base |
C4625 (nivel 4) | 'clase derivada': no se puede generar el constructor de copias porque no se puede obtener acceso a un constructor de copias de clase base |
C4626 (nivel 4) | 'clase derivada': no se puede generar el operador de asignaciones porque no se puede obtener acceso a un operador de asignaciones de clase base |
C4628 (nivel 1) | los digramas no son compatibles con -Ze. La secuencia de caracteres "digraph" no interpretado como token alternativo de "char" |
C4640 (nivel 3) | "instance": la construcción del objeto estático local no es segura para subprocesos |
C4643 (nivel 4) | El estándar C++ no admite reenvíos declarando "identifier" en el espacio de nombres std. 15.8 |
C4647 (nivel 3) | cambio de comportamiento: __is_pod(type) tiene un valor distinto en versiones anteriores |
C4654 (nivel 4) | El código colocado delante del valor include de la línea del encabezado precompilado se omitirá. Agregue el código al encabezado precompilado. 14.1 |
C4668 (nivel 4) | "symbol" no está definido como macro de preprocesador y se reemplaza por "0" para "directives" |
C4682 (nivel 4) | "symbol": no se ha especificado un atributo de parámetro direccional; se establecerá [in] como predeterminado |
C4686 (nivel 3) | "user-defined type": posible cambio de comportamiento, cambio en la convención de llamada devuelta de tipo definido por el usuario |
C4692 (nivel 1) | "function": la signatura de un miembro no privado contiene un tipo nativo privado de ensamblado "native_type" |
C4710 (nivel 4) | "function": la función no está insertada |
C4738 (nivel 3) | almacenando el resultado flotante de 32 bits en memoria; posible pérdida de rendimiento |
C4746 | el acceso volátil de "expression" está sujeto al valor /volatile:<iso|ms>; considere el uso de las funciones intrínsecas __iso_volatile_load/store |
C4749 (nivel 4) | compatible condicionalmente: offsetof aplicado al tipo de diseño no estándar "type" |
C4767 (nivel 4) | el nombre de sección "symbol" tiene más de 8 caracteres y lo truncará el vinculador |
C4774 (nivel 4) | "string": la cadena de formato esperada en el argumento number no es un literal de cadena |
C4777 (nivel 4) | "function": la cadena de función "string" requiere un argumento del tipo "type1", pero el argumento variádico number tiene el tipo "type2" |
C4786 (nivel 3) | "symbol": el nombre de objeto se ha truncado a "number" caracteres en la información de depuración |
C4800 (nivel 4) | Conversión implícita de "type" a bool. Posible pérdida de información 16.0 |
C4820 (nivel 4) | "bytes" bytes de relleno agregados después de la construcción "member_name" |
C4822 (nivel 1) | "member": la función miembro de clase local no tiene cuerpo |
C4826 (nivel 2) | La conversión de "type1" a "type2" genera una extensión de signo. Esto puede provocar un comportamiento en tiempo de ejecución inesperado. |
C4837 (nivel 4) | trígrafo detectado: "?? character" reemplazado por "character" |
C4841 (nivel 4) | extensión no estándar usada: designador de miembro compuesto usado en offsetof |
C4842 (nivel 4) | no se garantiza que el resultado de la propiedad "offsetof" aplicada a un tipo que usa la herencia múltiple sea coherente con las versiones del compilador |
C4866 (nivel 4) | el compilador "file(line_number)" podría no exigir el orden de evaluación de izquierda a derecha para la llamada a operator |
C4868 (nivel 4) | El compilador "file(line_number)" no puede aplicar el orden de evaluación de izquierda a derecha en la lista de inicialización entre llaves |
C4905 (nivel 1) | conversión de literal de cadena de tipo ancho a 'LPSTR' |
C4906 (nivel 1) | conversión de literal de cadena a 'LPWSTR' |
C4917 (nivel 1) | "declarator": un GUID se puede asociar únicamente a una clase, interfaz o espacio de nombres |
C4928 (nivel 1) | inicialización de copia no válida; se aplicó implícitamente más de una conversión definida por el usuario |
C4931 (nivel 4) | se supone que la biblioteca de tipos se compiló para punteros de número bits |
C4946 (nivel 1) | se utilizó reinterpret_cast entre clases relacionadas: "class1" y "class2" |
C4962 | "function": se han deshabilitado las optimizaciones guiadas por perfiles porque generaban datos de perfil incoherentes |
C4986 (nivel 4) | "symbol": la especificación de la excepción no coincide con la declaración anterior |
C4987 (nivel 4) | se usó una extensión no estándar: 'throw (...)' |
C4988 (nivel 4) | "symbol": variable declarada fuera del ámbito de clase o función |
C5022 | "type": se especificaron varios constructores de movimiento |
C5023 | "type": se especificaron varios operadores de asignaciones de movimiento |
C5024 (nivel 4) | "type": el constructor de movimiento se definió implícitamente como eliminado |
C5025 (nivel 4) | "type": el operador de asignaciones de movimiento se definió implícitamente como eliminado |
C5026 (nivel 1 y nivel 4) | "type": el constructor de movimiento se definió implícitamente como eliminado |
C5027 (nivel 1 y nivel 4) | "type": el operador de asignaciones de movimiento se definió implícitamente como eliminado |
C5029 (nivel 4) | se ha utilizado una extensión no estándar: los atributos de alineación en C++ se aplican solo a las variables, los miembros de datos y los tipos de etiquetas |
C5031 (nivel 4) | #pragma warning(pop): probable desajuste, el estado de advertencia de extracción se ha insertado en un archivo diferente 14.1 |
C5032 (nivel 4) | se ha detectado un valor #pragma warning(push) sin un #pragma warning(pop) correspondiente 14.1 |
Visual Studio 2017 y versiones posteriores
Las advertencias siguientes están desactivadas de forma predeterminada en Visual Studio 2017 y versiones posteriores:
Advertencia | Mensaje |
---|---|
C5034 | el uso de la función intrínseca "intrinsic" hace que la función function-name se compile como código invitado 15.3 |
C5035 | el uso de la característica "feature" hace que la función function-name se compile como código invitado 15.3 |
C5036 (nivel 1) | conversión de puntero de función varargs al compilar con /hybrid:x86arm64 "type1" a "type2" 15.3 |
C5038 (nivel 4) | el miembro de datos "member1" se inicializará después del miembro de datos "member2" 15.3 |
C5039 (nivel 4) | 'function': puntero o referencia a la función potencialmente iniciada que se pasa a la función de C de extern en -EHc . Es posible que se produzca un comportamiento indefinido si esta función genera una excepción. 15.5 |
C5041 (nivel 4) | "member-name": no se necesita la definición fuera de línea para el miembro de datos estático constexpr y está en desuso en C++17. 15.2 |
C5042 (nivel 3) | "function": las declaraciones de función en el ámbito de bloque no se pueden especificar "inline" en C++ estándar; quite el especificador "inline" 15.5 |
C5045 | El compilador insertará la mitigación de Spectre para la carga de memoria si se ha especificado el modificador /Qspectre 15.7 |
Visual Studio 2019 y versiones posteriores
Las advertencias siguientes están desactivadas de forma predeterminada en Visual Studio 2019 y versiones posteriores:
Advertencia | Mensaje |
---|---|
C5052 (nivel 3) | La palabra clave 'keyword-name' se introdujo en la versión de C++ y requiere el uso de la opción de línea de comandos 'option' 16.1 |
C5204 (nivel 3) | Una clase con funciones virtuales tiene un destructor trivial no virtual. 16.5 |
C5214 (nivel 4) | La aplicación de "keyword" a un operando con un tipo calificado como volátil está en desuso en C++20 16.7 |
C5215 (nivel 4) | "function-parameter" un parámetro de función con un tipo calificado como volátil está en desuso en C++20 16.7 |
C5216 (nivel 4) | "return-type" un tipo de valor devuelto calificado como volátil está en desuso en C++20 16.7 |
C5217 (nivel 4) | Una declaración de enlace estructurado que incluye un tipo volátil está en desuso en C++20 16.7 |
C5219 (nivel 2) | conversión implícita de "type-1" a "type-2", posible pérdida de datos 16.7 |
C5220 (nivel 4) | "member": un miembro de datos no estático con un tipo calificado como volátil ya no implica eso los constructores de copia/movimiento generados por el compilador y los operadores de asignación de copia/movimiento no son triviales 16.7 |
C5233 (nivel 4) | la captura lambda explícita "identifier" no se usa 16.10 |
C5240 (nivel 4) | "attribute-name": el atributo se omite en esta posición sintáctica 16.10 |
C5243 (nivel 1) | "type-name": usar la clase incompleta "class-name" puede provocar una posible infracción de una regla de definición debido a la limitación de ABI 16.10 |
C5245 (nivel 4) | "function": se quitó la función sin referencia con vinculación interna |
C5246 (nivel 1) | "member": la inicialización de un subobjeto debe incluirse entre llaves 16.10 |
C5247 (nivel 1) | La sección "section-name" está reservada para la inicialización dinámica de C++. La creación manual de la sección interferirá con la inicialización dinámica de C++ y puede provocar un comportamiento indefinido 16.11 |
C5248 (nivel 1) | La sección "section-name" está reservada para la inicialización dinámica de C++. La variable que se coloca manualmente en la sección se puede optimizar y su orden con respecto a los inicializadores dinámicos generados por el compilador no está especificado 16.11 |
Visual Studio 2022 y versiones posteriores
Las advertencias siguientes están desactivadas de forma predeterminada en Visual Studio 2022 y versiones posteriores:
Advertencia | Mensaje |
---|---|
C5249 (nivel 1) | "bitfield" del tipo "enumeration_name" tiene enumeradores con nombre con valores que no se pueden representar en el ancho de campo de bits dado de "bitfield_width". 17.0 |
C5250 (nivel 3) | "function_name": función intrínseca no declarada. 17.0 |
C5251 (nivel 4) | segment-name se modificó después de incluir el encabezado 17.1 |
C5254 (nivel 4) | la característica de lenguaje "terse static assert" requiere la marca del compilador "/std:c++17" 17.1 |
C5256 (nivel 1) | "enumeration": una declaración no definitoria de una enumeración con un tipo subyacente fijo solo se permite como una declaración independiente 17.2 |
C5258 (nivel 4) | la captura explícita de "symbol" no es necesaria para este uso 17.2 |
C5259 (nivel 4) | 'specialized-type': la especialización explícita requiere 'template <> ' 17.3 |
C5262 (nivel 1, error) | aquí se produce un fallo implícito: ¿le falta una instrucción break ? Se usa [[fallthrough]] cuando se omite intencionadamente una break instrucción entre los casos 17.4 |
C5263 (nivel 4) | llamar a 'std::move ' en un objeto temporal impide la copia 17.4 |
C5264 (nivel 4) | 'nombre-variable': no se usa la variable 'const' 17.4 |
C5266 (nivel 4) | El calificador 'const' en el tipo de valor devuelto no tiene ningún efecto 17.6 |
C5267 (nivel 4) | La definición del operador de asignación o constructor de copia implícito para "type" está en desuso porque tiene un operador de asignación proporcionado por el usuario/constructor de copia 17.7 |
14.1 Esta advertencia está disponible a partir Visual Studio 2015 Update 1.
14.3 Esta advertencia está disponible a partir Visual Studio 2015 Update 3.
15.2 Esta advertencia está disponible a partir Visual Studio 2017, versión 15.2.
15.3 Esta advertencia está disponible a partir Visual Studio 2017, versión 15.3.
15.5 Esta advertencia está disponible a partir Visual Studio 2017, versión 15.5.
15.7 Esta advertencia está disponible a partir Visual Studio 2017, versión 15.7.
15.8 Esta advertencia está disponible a partir Visual Studio 2017, versión 15.8.
16.0 Esta advertencia está disponible a partir Visual Studio 2019 RTM.
16.5 Esta advertencia está disponible a partir Visual Studio 2019, versión 16.5.
16.7 Esta advertencia está disponible a partir Visual Studio 2019, versión 16.7.
16.10 Esta advertencia está disponible a partir Visual Studio 2019, versión 16.10.
16.11 Esta advertencia está disponible a partir Visual Studio 2019, versión 16.11.
17.0 Esta advertencia está disponible a partir Visual Studio 2022, versión 17.0.
17.1 Esta advertencia está disponible a partir Visual Studio 2022, versión 17.1.
17.2 Esta advertencia está disponible a partir Visual Studio 2022, versión 17.2.
17.3 Esta advertencia está disponible a partir Visual Studio 2022, versión 17.3.
17.4 Esta advertencia está disponible a partir de la versión 17.4 de Visual Studio 2022.
17.5 Esta advertencia está disponible a partir de la versión 17.5 de Visual Studio 2022.
17.6 Esta advertencia está disponible a partir de la versión 17.6 de Visual Studio 2022.
17.7 Esta advertencia está disponible a partir de la versión 17.7 de Visual Studio 2022.
Perm Esta advertencia está desactivada a menos que se establezca la opción del compilador /permissive-
.
Advertencias desactivadas de manera predeterminada en versiones anteriores
Esta advertencia estaba desactivada de manera predeterminada en Visual Studio 2015, versión 15.3 y se habilitó en la versión 15.5 de Visual Studio 2015:
Advertencia | Mensaje |
---|---|
C4768 | __declspec Se omiten los atributos antes de la especificación de vinculación |
Estas advertencias estaban desactivadas de manera predeterminada en las versiones del compilador anteriores a Visual Studio 2015:
Advertencia | Mensaje |
---|---|
C4302 (nivel 2) | "conversion": truncamiento de "type1" a "type2" |
C4311 (nivel 1) | "variable" : truncamiento de puntero de "type" a "type" |
C4312 (nivel 1) | 'operation': conversión de 'type1' a 'type2' de mayor tamaño |
C4319 (nivel 1) | 'operator': cero para extender 'type1' a 'type2' de mayor tamaño |
Esta advertencia estaba desactivada de manera predeterminada en las versiones del compilador anteriores a Visual Studio 2012:
Advertencia | Mensaje |
---|---|
C4431 (nivel 4) | falta el especificador de tipo; se presupone int. Nota: C no admite default-int |