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

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

  • /wLnnnn

    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 calificado no válido en la declaración de miembro 14.3Perm
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) 'optionpath': 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) la caída implícita se produce aquí; ¿Falta una break declaración? 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

Consulte también

Pragma warning