Opciones del compilador por categoría

Este artículo contiene una lista por categorías de las opciones del compilador. Para acceder a una lista alfabética, vea Opciones del compilador por orden alfabético.

Optimización

Opción Fin
/favor:<blend|AMD64|INTEL64|ATOM> Muestra el código optimizado para una arquitectura especificada o para un intervalo de arquitecturas.
/O1 Crea código pequeño.
/O2 Crea código rápido.
/Ob<n> Controla la expansión en línea.
/Od Deshabilita la optimización.
/Og Obsoleto. Usa optimizaciones globales.
/Oi[-] Genera funciones intrínsecas.
/Os Favorece el código pequeño.
/Ot Favorece el código rápido.
/Ox Subconjunto de /O2 que no incluye /GF ni /Gy.
/Oy Omite el puntero de marco. (solo x86)

Generación de código

Opción Fin
/arch:<IA32|SSE|SSE2|AVX|AVX2|AVX512> Requisitos de arquitectura de CPU mínimos. IA32, SSE y SSE2 son solo x86.
/clr Genera un archivo de salida para ejecutar en Common Language Runtime.
/clr:implicitKeepAlive- Desactiva la emisión implícita de System::GC::KeepAlive(this).
/clr:initialAppDomain Habilita el comportamiento inicial de AppDomain de Visual C++ 2002.
/clr:netcore Produce ensamblados que tienen como destino el entorno de ejecución de .NET Core.
/clr:noAssembly No genera un ensamblado.
/clr:nostdimport No importa los ensamblados necesarios implícitamente.
/clr:nostdlib Omite el directorio del sistema de .NET Framework al buscar ensamblados.
/clr:pure Produce un archivo de salida de solo IL (sin código ejecutable nativo).
/clr:safe Produce un archivo de salida que se puede comprobar solo mediante IL.
/EHa Habilita el control de excepciones de C++ (con excepciones SEH).
/EHc extern "C" tiene nothrow como valor predeterminado.
/EHr Genera siempre comprobaciones de terminación en tiempo de ejecución noexcept.
/EHs Habilita el control de excepciones de C++ (sin excepciones SEH).
/fp:contract Tiene en cuenta las contracciones de punto flotante al generar código.
/fp:except[-] Tiene en cuenta las excepciones de punto flotante al generar el código.
/fp:fast Modelo de punto flotante "rápido"; los resultados son menos predecibles.
/fp:precise Modelo de punto flotante "preciso"; los resultados son predecibles.
/fp:strict Modelo de punto flotante "estricto" (implica /fp:except).
/fpcvt:BC Conversiones de punto flotante a entero sin signo compatibles con versiones anteriores.
/fpcvt:IA Comportamiento de conversión nativo de Intel de punto flotante a entero sin signo.
/fsanitize Habilita la compilación de instrumentación del saneador, como AddressSanitizer.
/fsanitize-coverage Habilita la compilación de instrumentación de cobertura de código para bibliotecas como LibFuzzer.
/GA Optimiza el código para aplicaciones Windows.
/Gd Usa la convención de llamada __cdecl . (solo x86)
/Ge Obsoleto. Activa las comprobaciones de la pila.
/GF Habilita la agrupación de cadenas.
/Gh Llama a la función de enlace _penter.
/GH Llama a la función de enlace _pexit.
/GL[-] Habilita la optimización completa del programa.
/Gm[-] Obsoleto. Habilita la recompilación mínima.
/Gr Usa la convención de llamada __fastcall . (solo x86)
/GR[-] Habilita la información de tipo en tiempo de ejecución (RTTI).
/GS[-] Comprueba la seguridad de búfer.
/Gs[n] Controla las comprobaciones de la pila.
/GT Admite la seguridad para fibras para los datos asignados mediante almacenamiento local de subprocesos estáticos.
/Gu[-] Garantiza que las distintas funciones tengan direcciones diferentes.
/guard:cf[-] Agrega las comprobaciones de seguridad de protección de flujo de control.
/guard:ehcont[-] Habilita metadatos de continuación de control de excepciones.
/Gv Usa la convención de llamada __vectorcall . (solo x86 y x64)
/Gw[-] Habilita la optimización global de los datos de todo el programa.
/GX[-] Obsoleto. Habilita el control sincrónico de excepciones. En su lugar, use /EH.
/Gy[-] Habilita la vinculación en el nivel de función.
/Gz Usa la convención de llamada __stdcall . (solo x86)
/GZ Obsoleto. Habilita las comprobaciones rápidas. (Igual que /RTC1).
/homeparams Fuerza la escritura de parámetros pasados en registros en sus ubicaciones en la pila a la entrada de la función. Esta opción del compilador es solo para compiladores x64 (compilación nativa y cruzada).
/hotpatch Crea una imagen a la que se puede aplicar una revisión reciente.
/jumptablerdata Coloque las tablas de salto de instrucción switch case en la .rdata sección .
/Qfast_transcendentals Genera funciones transcendentales rápidas.
/QIfist Obsoleto. Suprime la llamada de la función del asistente _ftol cuando se requiere la conversión de un tipo de punto flotante a un tipo entero. (solo x86)
/Qimprecise_fwaits Quita los comandos fwait del interior de los bloques try .
/QIntel-jcc-erratum Mitiga el impacto en el rendimiento de la actualización de microcódigo de comprobación de errores de Intel JCC.
/Qpar Habilita la ejecución en paralelo automática de bucles.
/Qpar-report:n Habilita los niveles de informe para la ejecución en paralelo automática.
/Qsafe_fp_loads Utiliza instrucciones de movimiento de enteros para valores de punto flotante y deshabilita ciertas optimizaciones de carga de punto flotante.
/Qspectre[-] Habilita mitigaciones para CVE 2017-5753, para una clase de ataques de Spectre.
/Qspectre-load Genera instrucciones de serialización para cada instrucción de carga.
/Qspectre-load-cf Genera instrucciones de serialización para cada instrucción de flujo de control que cargue memoria.
/Qvec-report:n Habilita los niveles de informe para la vectorización automática.
/RTC1 Habilita comprobaciones rápidas en tiempo de ejecución (equivalentes a /RTCsu).
/RTCc Realiza una conversión en comprobaciones de tipo más pequeñas en tiempo de ejecución.
/RTCs Habilita las comprobaciones en tiempo de ejecución del marco de pila.
/RTCu Habilita las comprobaciones de uso local no inicializadas.
/volatile:iso La adquisición o liberación de semántica no se garantiza en accesos volátiles.
/volatile:ms La adquisición o liberación de semántica se garantiza en accesos volátiles.

archivos de salida

Opción Fin
/doc Procesa los comentarios de documentación generando un archivo XML.
/FA Configura un archivo de lista de ensamblados.
/Fa Crea un archivo de lista de ensamblado.
/Fd Cambia el nombre del archivo de la base de datos de programa.
/Fe Cambia el nombre del archivo ejecutable.
/Fi Especifica el nombre del archivo de salida preprocesado.
/Fm Crea un archivo de asignaciones.
/Fo Crea un archivo de objeto.
/Fp Especifica el nombre de un archivo de encabezado precompilado.
/FR, /Fr Asigna un nombre a los archivos del explorador .sbr generados. /Fr está en desuso.
/Ft<dir> Ubicación de los archivos de encabezado generados para #import.

Preprocesador

Opción Fin
/AI<dir> Especifica un directorio de búsqueda para resolver las referencias a archivos que se transfieren a la directiva #using.
/C Conserva los comentarios durante el preprocesamiento
/D<name>{=|#}<text> Define constantes y macros.
/E Copia los resultados del preprocesador a resultados estándar.
/EP Copia los resultados del preprocesador a resultados estándar.
/FI<file> Preprocesa el archivo de inclusión especificado.
/FU<file> Fuerza el uso de un nombre de archivo, como si se hubiera transferido a la directiva #using.
/Fx Combina el código insertado con el archivo de código fuente.
/I<dir> Busca archivos de inclusión en un directorio.
/P Escribe los resultados del preprocesador en un archivo.
/PD Imprime todas las definiciones de macros.
/PH Genera #pragma file_hash al preprocesar.
/U<name> Quita una macro predefinida.
/u Quita todas las macros predefinidas.
/X Omite el directorio de archivos de inclusión estándar.

Módulos o unidades de encabezado

Opción Fin
/exportHeader Crea los archivos de unidades de encabezado (.ifc) especificados por los argumentos de entrada.
/headerUnit Especifica dónde buscar el archivo de unidad de encabezado (.ifc) para el encabezado especificado.
/headerName Crea una unidad de encabezado a partir del encabezado especificado.
/ifcOutput Especifique el nombre de archivo de salida o el directorio para los archivos creados .ifc .
/interface Trata el archivo de entrada como una unidad de interfaz de módulo.
/internalPartition Trata el archivo de entrada como una unidad de partición interna.
/reference Usa IFC de módulo con nombre.
/scanDependencies Enumera las dependencias de módulo y unidad de encabezado en el formulario JSON estándar de C++.
/sourceDependencies Enumera todas las dependencias de nivel de origen.
/sourceDependencies:directives Enumera las dependencias de módulo y unidad de encabezado.
/translateInclude Trata #include como import.

Idioma

Opción Fin
/await Habilita las extensiones de corrutinas (funciones reanudables).
/await:strict Habilita la compatibilidad de corrutinas de C++20 estándar con versiones anteriores del lenguaje.
/constexpr:backtrace<N> Muestra N evaluaciones constexpr en diagnósticos (valor predeterminado: 10).
/constexpr:depth<N> Límite de profundidad de recursividad para la evaluación constexpr (valor predeterminado: 512).
/constexpr:steps<N> Finaliza la evaluación constexpr después de N pasos (valor predeterminado: 100 000).
/openmp Habilita #pragma omp en el código fuente.
/openmp:experimental Habilita las extensiones de lenguaje OpenMP 2.0 más la selección de las extensiones de lenguaje OpenMP 3.0+.
/openmp:llvm Extensiones de lenguaje OpenMP que usan el entorno de ejecución de LLVM.
/permissive[-] Establece el modo de conformidad estándar.
/std:c++14 ISO/IEC 14882:2014 del estándar de C++14 (valor predeterminado).
/std:c++17 ISO/IEC 14882:2017 del estándar de C++17.
/std:c++20 ISO/IEC 14882:2020 del estándar de C++20.
/std:c++latest Características de versión preliminar del estándar de C++ del último borrador.
/std:c11 ISO/IEC 9899:2011 del estándar de C11.
/std:c17 ISO/IEC 9899:2018 del estándar de C17.
/std:clatest Las características más recientes de la versión preliminar estándar de C.
/vd{0|1|2} Suprime o habilita los miembros de la clase vtordisp ocultos.
/vmb Usa la base más apropiada para los punteros a miembros.
/vmg Usa generalidad completa para los punteros a miembros.
/vmm Declara la herencia múltiple.
/vms Declara la herencia simple.
/vmv Declara la herencia virtual.
/Z7 Genera información de depuración compatible con C 7.0.
/Za Deshabilita algunas extensiones de lenguaje C89 en código C.
/Zc:__cplusplus[-] Habilita la macro __cplusplus para notificar el estándar admitido (desactivada de forma predeterminada).
/Zc:__STDC__ Se admite la habilitación de la __STDC__ macro para notificar el estándar de C (desactivado de forma predeterminada).
/Zc:alignedNew[-] Habilita la asignación dinámica alineada en exceso de C++17 (activada de forma predeterminada en C++17).
/Zc:auto[-] Aplica el nuevo significado de C++ estándar para auto (activada de forma predeterminada).
/Zc:char8_t[-] Habilita o deshabilita la compatibilidad con literales nativos u8 de C++20 como const char8_t (desactivada de forma predeterminada, excepto en /std:c++20).
/Zc:enumTypes[-] Habilite las reglas estándar de C++ para los tipos base inferidos enum (desactivado b y predeterminado, no implícito en /permissive-).
/Zc:externC[-] Aplica reglas de C++ estándar para las funciones extern "C" (implícitas en /permissive-).
/Zc:externConstexpr[-] Habilita la vinculación externa para las variables constexpr (desactivada de forma predeterminada).
/Zc:forScope[-] Aplica reglas de ámbito for de C++ estándar (activadas de forma predeterminada).
/Zc:gotoScope Aplicar reglas estándar de C++ goto en torno a la inicialización de variables locales (implícitas por /permissive-).
/Zc:hiddenFriend[-] Aplica reglas de confianza ocultas de C++ estándar (implícitas en /permissive-).
/Zc:implicitNoexcept[-] Habilita noexcept implícito en las funciones necesarias (activado de forma predeterminada).
/Zc:inline[-] Quita funciones o datos sin referencia si son COMDAT o solo tienen vinculación interna (desactivado de forma predeterminada).
/Zc:lambda[-] Habilita el nuevo procesador lambda para las comprobaciones sintácticas en modo de conformidad en expresiones lambda genéricas.
/Zc:noexceptTypes[-] Aplica reglas noexcept de C++17 (activadas de forma predeterminada en C++17 o versiones posteriores).
/Zc:nrvo[-] Habilite la copia opcional y mueva las elisiones (de forma predeterminada en /O2, /permissive-o /std:c++20 posterior).
/Zc:preprocessor[-] Usa el nuevo preprocesador de conformidad (desactivado de forma predeterminada, excepto en C11/C17).
/Zc:referenceBinding[-] Un UDT temporal no se enlazará a una referencia lvalue que no es const (desactivado de forma predeterminada).
/Zc:rvalueCast[-] Aplica reglas de conversión de tipos explícitas de C++ estándar (desactivadas de forma predeterminada).
/Zc:sizedDealloc[-] Habilita las funciones de desasignación de tamaño global de C++14 (activado de forma predeterminada).
/Zc:strictStrings[-] Deshabilitar el literal de cadena en la conversión de char* o wchar_t* (desactivada de forma predeterminada).
/Zc:templateScope[-] Aplicar reglas de sombreado de parámetros de plantilla de C++ estándar (desactivadas de forma predeterminada).
/Zc:ternary[-] Aplica reglas de operador condicionales en tipos de operando (desactivadas de forma predeterminada).
/Zc:threadSafeInit[-] Habilita la inicialización estática local segura para subprocesos (activada de forma predeterminada).
/Zc:throwingNew[-] Supone que operator new produce un error (desactivado de forma predeterminada).
/Zc:tlsGuards[-] Genera comprobaciones en tiempo de ejecución para la inicialización de variables TLS (activado de forma predeterminada).
/Zc:trigraphs Habilita trígrafos (obsoleto, desactivado de forma predeterminada).
/Zc:twoPhase[-] Use el comportamiento de análisis de plantillas no conforme (conforme de forma predeterminada).
/Zc:wchar_t[-] wchar_t es un tipo nativo, no una definición de tipo (activado de forma predeterminada).
/Zc:zeroSizeArrayNew[-] Llame al miembro new/delete para matrices de tamaño 0 de objetos (activado de forma predeterminada).
/Ze Obsoleto. Habilita las extensiones de lenguaje C89.
/Zf Mejora el tiempo de generación de PDB en compilaciones paralelas.
/ZH:[MD5|SHA1|SHA_256] Especifica MD5, SHA-1 o SHA-256 para las sumas de comprobación en la información de depuración.
/ZI Incluye la información de depuración en una base de datos de programa compatible con Editar y continuar. (solo x86)
/Zi Genera información de depuración completa.
/Zl Quita el nombre de la biblioteca predeterminada del archivo .obj.
/Zo[-] Genera información de depuración más completa para el código optimizado.
/Zp[n] Empaqueta los miembros de la estructura.
/Zs Comprueba únicamente la sintaxis.
/ZW Genera un archivo de salida para que se ejecute en Windows Runtime.

Linking

Opción Fin
/F Establece el tamaño de la pila.
/LD Crea una biblioteca de vínculos dinámicos.
/LDd Crea una biblioteca de vínculos dinámicos para depuración.
/link Pasa la opción especificada a LINK.
/LN Crea un .netmodule MSIL.
/MD Compila para crear una DLL multiproceso mediante MSVCRT.lib.
/MDd Compila para crear una DLL multiproceso para depuración mediante MSVCRTD.lib.
/MT Compila para crear un archivo ejecutable multiproceso mediante LIBCMT.lib.
/MTd Compila para crear un archivo ejecutable multiproceso para depuración mediante LIBCMTD.lib.

Varios

Opción Fin
/? Enumera las opciones del compilador.
@ Especifica un archivo de respuesta.
/analyze Permite el análisis de código
/bigobj Aumenta el número de secciones direccionables en un archivo .obj.
/c Compila sin vincular.
/cgthreads Especifica el número de subprocesos de cl.exe que se deben usar para la optimización y la generación de código.
/errorReport Obsoleto. Informe de errores de Windows (WER) control de errores de configuración.
/execution-charset Establece el juego de caracteres de ejecución.
/fastfail Habilita el modo de error rápido.
/FC Muestra la ruta de acceso completa de los archivos de código fuente que se pasan a cl.exe en texto de diagnóstico.
/FS Fuerza que las operaciones de escritura en el archivo PDB se serialicen mediante MSPDBSRV.EXE.
/H Obsoleto. Restringe la longitud de los nombres externos (públicos).
/HELP Enumera las opciones del compilador.
/J Cambia el tipo char predeterminado.
/JMC Admite la depuración nativa de C++ de tipo "Solo mi código".
/kernel El compilador y el enlazador crean un binario que se puede ejecutar en el kernel de Windows.
/MP Compila varios archivos de código fuente simultáneamente.
/nologo Suprime la presentación de la pancarta de inicio de sesión.
/presetPadding Inicializa el relleno a cero para tipos de clase basados en la pila.
/showIncludes Muestra una lista de todos los archivos de inclusión durante la compilación.
/source-charset Establece el juego de caracteres de origen.
/Tc Especifica un archivo de código fuente de C.
/TC Especifica que todos los archivos de código fuente son C.
/Tp Especifica un archivo de código fuente de C++.
/TP Especifica que todos los archivos de código fuente son C++.
/utf-8 Establece juegos de caracteres de origen y ejecución en UTF-8.
/V Obsoleto. Establece la cadena de versión.
/validate-charset Valida los archivos UTF-8 solo para caracteres compatibles.
/volatileMetadata Genera metadatos en accesos a la memoria volátil.
/Yc Crea un archivo .PCH.
/Yd Obsoleto. Coloca información completa de depuración en todos los archivos de objeto. En su lugar, use /Zi.
/Yl Inserta una referencia de PCH cuando se crea una biblioteca de depuración.
/Yu Usa un archivo de encabezado precompilado durante la compilación.
/Y- Omite todas las demás opciones del compilador de encabezado precompilado en la generación actual.
/Zm Especifica el límite de asignación de memoria del encabezado precompilado.

Diagnóstico

Opción Fin
/diagnostics:caret[-] Formato de diagnóstico: imprime la columna y la línea de origen indicada.
/diagnostics:classic Usa el formato de diagnóstico heredado.
/diagnostics Formato de diagnóstico: imprime información de columna.
/external:anglebrackets Trata todos los encabezados incluidos mediante <> como externos.
/external:env:<var> Especifica una variable de entorno con ubicaciones de encabezados externos.
/external:I <path> Especifica la ubicación de encabezados externos.
/external:templates[-] Evalúa el nivel de advertencia en la cadena de creación de una instancia de plantilla.
/external:W<n> Establece el nivel de advertencia para los encabezados externos.
/options:strict Las opciones del compilador no reconocidas son errores.
/sdl Habilita más características y advertencias de seguridad.
/w Deshabilita todas las advertencias.
/W0, /W1, /W2, , /W3, /W4 Establece el nivel de advertencia de salida.
/w1<n>, /w2<n>, , /w3<n>, /w4<n> Establece el nivel de advertencia para la advertencia especificada.
/Wall Habilita todas las advertencias, incluso las que están deshabilitadas de forma predeterminada.
/wd<n> Deshabilita la advertencia especificada.
/we<n> Trata la advertencia especificada como un error.
/WL Habilita los diagnósticos de una línea para los mensajes de error y de advertencia cuando se compila código fuente de C++ desde la línea de comandos.
/wo<n> Muestra la advertencia especificada solo una vez.
/Wv:xx[.yy[.zzzzz]] Deshabilita las advertencias introducidas después de la versión especificada del compilador.
/WX Trata las advertencias como errores.

Opciones experimentales

Las opciones experimentales solo se pueden admitir con determinadas versiones del compilador. También podrían comportarse de forma diferente en distintas versiones del compilador. A menudo, la mejor documentación (o la única) para las opciones experimentales se encuentra en el blog del equipo de Microsoft C++.

Opción Fin
/experimental:log Habilita la salida de SARIF estructurada experimental.
/experimental:module Habilita la compatibilidad con módulos experimentales.

Opciones de compilador en desuso y quitadas

Opción Fin
/clr:noAssembly Obsoleto. Use /LN (Crear módulo MSIL) en su lugar.
/errorReport Obsoleto. Los informes de errores se controlan mediante la configuración de Informe de errores de Windows (WER).
/experimental:preprocessor Obsoleto. Habilita la compatibilidad con el preprocesador experimental conforme. Use /Zc:preprocessor
/Fr Obsoleto. Crea un archivo de información de examen sin variables locales.
/Ge Obsoleto. Activa las comprobaciones de la pila. Está activada de forma predeterminada.
/Gm Obsoleto. Habilita la recompilación mínima.
/GX Obsoleto. Habilita el control sincrónico de excepciones. En su lugar, use /EH.
/GZ Obsoleto. Habilita las comprobaciones rápidas. En su lugar, use /RTC1.
/H Obsoleto. Restringe la longitud de los nombres externos (públicos).
/Og Obsoleto. Usa optimizaciones globales.
/QIfist Obsoleto. Se usaba para especificar cómo hacer una conversión de un tipo de punto flotante a un tipo entero.
/V Obsoleto. Establece la cadena de versión del archivo .obj.
/Wp64 Obsoleto. Detecta problemas de portabilidad de 64 bits.
/Yd Obsoleto. Coloca información completa de depuración en todos los archivos de objeto. En su lugar, use /Zi.
/Zc:forScope- Obsoleto. Deshabilita la conformidad en el ámbito del bucle.
/Ze Obsoleto. Habilita las extensiones de lenguaje .
/Zg Se quitó en Visual Studio 2015. Genera prototipos de función.

Consulte también

Referencia de compilación de C/C++
Opciones del compilador de MSVC
Sintaxis de línea de comandos del compilador de MSVC