/std (Especificar la versión estándar del lenguaje)

Habilite las características admitidas del lenguaje C y C++ de la versión especificada del estándar de lenguaje C o C++.

Sintaxis

/std:c++14
/std:c++17
/std:c++20
/std:c++latest
/std:c11
/std:c17
/std:clatest

Comentarios

Las opciones /stdestán disponibles en Visual Studio 2017 y versiones posteriores. Se usa para controlar las características estándar del lenguaje de programación ISO C o C++ específicas de la versión y que están habilitadas durante la compilación del código. Las opciones le permiten deshabilitar la compatibilidad con ciertas características nuevas del lenguaje y de la biblioteca: las que pueden interrumpir el código existente que se ajusta a una versión determinada del estándar del lenguaje.

El compilador de Microsoft C++ en Visual Studio 2017 y versiones posteriores no admite los modos de estándares de C++ anteriores a C++14 (/std:c++14). Dicha compatibilidad no está planeada. Como alternativa imperfecta, es posible usar conjuntos de herramientas antiguos del compilador de Visual C++ que no implementaron características de estándares posteriores. Para obtener más información sobre cómo instalar y usar conjuntos de herramientas antiguos del compilador en Visual Studio, consulte Uso de varios destinos nativos en Visual Studio para compilar proyectos antiguos.

Compatibilidad con los estándares de C++

La opción /stden vigor durante una compilación de C++ puede detectarse mediante el uso de la macro del preprocesador _MSVC_LANG. Para más información, vea Macros de preprocesador.

Importante

Dado que parte del código existente depende de que el valor de la macro __cplusplus sea 199711L, el compilador de MSVC no cambia el valor de esta macro a menos que opte explícitamente por establecer /Zc:__cplusplus. Especifique /Zc:__cplusplus y la opción /std para establecer __cplusplus en el valor adecuado.

/std:c++14
La opción /std:c++14 habilita las características específicas del estándar C++14 implementadas por el compilador MSVC. Esta opción es el valor predeterminado para el código compilado como C++. Está disponible a partir de Visual Studio 2015, actualización 3.

Esta opción deshabilita la compatibilidad del compilador y la biblioteca estándar con las características que se han modificado o que son nuevas en las versiones más recientes del estándar de lenguaje. Sin embargo, no deshabilita algunas características de C++17 ya implementadas en versiones anteriores del compilador de MSVC. Para más información, vea Conformidad del lenguaje Microsoft C/C++. Las tablas indican qué características de C++17 están habilitadas cuando especifique /std:c++14.

Las siguientes características permanecen habilitadas cuando se especifica la opción /std:c++14 para evitar los cambios importantes para los usuarios que ya han tomado dependencias de las características disponibles en, o antes de, Visual Studio 2015, actualización 2:

/std:c++17
La opción /std:c++17 habilita las características y el comportamiento específicos del estándar de C++17. Habilita el conjunto completo de características de C++17 que implementa el compilador MSVC. Esta opción deshabilita la compatibilidad del compilador y la biblioteca estándar con las características nuevas o modificadas después de C++17. Deshabilita específicamente los cambios posteriores a C++17 en el estándar de C++ y en las versiones del borrador de trabajo. No deshabilita las actualizaciones retroactivas de defectos del estándar de C++. Esta opción está disponible a partir de la versión 15.3 de Visual Studio 2017.

Según el nivel de actualización o la versión del compilador MSVC, es posible que las características de C++17 no estén totalmente implementadas o no sean totalmente conformes al especificar la opción/std:c++17. Para obtener información general de la conformidad del lenguaje C++ en Visual C++ por el número de versión, vea Conformidad del lenguaje Microsoft C++.

/std:c++20
La opción /std:c++20 habilita las características y el comportamiento específicos del estándar de C++20. Disponible a partir de la versión 16.11 de Visual Studio 2019, habilita el conjunto completo de características de C++20 implementadas por el compilador de MSVC, a excepción de std::format, las extensiones de formato de C++20 <chrono> y los generadores y adaptadores de rangos de <ranges>. Estas características siguen estando disponibles solo en /std:c++latest.

La opción /std:c++20 deshabilita la compatibilidad del compilador y la biblioteca estándar con las características nuevas o modificadas después de C++20. Deshabilita específicamente los cambios posteriores a C++20 en el estándar de C++ y en las versiones del borrador de trabajo. No deshabilita las actualizaciones retroactivas de defectos del estándar de C++.

/std:c++latest
La opción /std:c++latest habilita todas las características del compilador y de la biblioteca estándar actualmente implementadas para el siguiente borrador estándar, así como algunas características en curso y experimentales. Esta opción está disponible a partir de Visual Studio 2015, actualización 3.

Según el nivel de actualización o la versión del compilador MSVC, es posible que las características de C++17, C++20 o la propuesta de C++23 no se implementen por completo o no sean totalmente conformes cuando se especifica la opción /std:c++latest. Se recomienda usar la versión más reciente de Visual Studio para cumplir con los estándares máximos. Para obtener información general sobre la conformidad del lenguaje y la biblioteca de C++ en Visual C++ por la versión de lanzamiento, consulte Conformidad del lenguaje de Microsoft C/C++.

En las versiones de Visual Studio 2019 anteriores a la versión 16.11, /std:c++latest hace falta habilitar todas las características de la biblioteca estándar y del compilador de C++20.

Para obtener una lista de las características de lenguaje y biblioteca compatibles, vea Novedades de C++ en Visual Studio.

La opción /std:c++latest no habilita las características protegidas por el modificador/experimental, pero es posible que deba habilitarlas.

Nota:

Las características del compilador y de la biblioteca habilitadas por /std:c++latest pueden aparecer en un futuro en el estándar de C++. Las características que no se han aprobado están sujetas a cambios importantes o a eliminación sin previo aviso, y se proporcionan como estén.

Compatibilidad con los estándares de C

Puede invocar el compilador de Microsoft C mediante la opción del compilador /TC o /Tc. Se usa de manera predeterminada para el código que tiene una .c extensión de archivo, a menos que se invalide mediante una opción /TP o /Tp. El compilador de C predeterminado (es decir, el compilador cuando /std:c11 o /std:c17 no se especifica) implementa ANSI C89, pero incluye varias extensiones de Microsoft, algunas de las cuales forman parte de ISO C99. Algunas extensiones de Microsoft a C89 se pueden deshabilitar mediante la opción del compilador /Za, pero otras permanecen en vigor. No es posible especificar la conformidad C89 estricta. El compilador no implementa varias características necesarias de C99, por lo que tampoco es posible especificar la conformidad con C99.

/std:c11
La opción /std:c11 habilita la conformidad ISO C11. Está disponible a partir de la versión 16.8 de Visual Studio 2019.

/std:c17
La opción /std:c17 habilita la conformidad ISO C17. Está disponible a partir de la versión 16.8 de Visual Studio 2019.

Dado que el nuevo preprocesador es necesario para admitir estos estándares, las opciones del compilador /std:c11 y /std:c17 establecen la opción /Zc:preprocessor automáticamente. Si desea usar el preprocesador tradicional (heredado) para C11 o C17, debe establecer la opción del compilador /Zc:preprocessor- explícitamente. Establecer la opción /Zc:preprocessor- puede provocar un comportamiento inesperado y no se recomienda.

Nota:

En el momento de la versión y a través de Visual Studio 2019, versión 16.10, las bibliotecas de Windows SDK y UCRT instaladas por Visual Studio aún no admiten el código C11 y C17. Se requiere una versión actualizada de Windows SDK y UCRT. Para obtener más información e instrucciones de instalación, consulte Instalar la compatibilidad con C11 y C17 en Visual Studio.

Cuando se especifica /std:c11 o /std:c17, MSVC admite todas las características de C11 y C17 requeridas por los estándares. Las opciones del compilador /std:c11 y /std:c17 habilitan la compatibilidad con estas funcionalidades:

El IDE usa la configuración de C para IntelliSense y el resaltado de código cuando los archivos de código fuente tienen una extensión de archivo .c o cuando se especifica la /TC o la opción del compilador /Tc. Actualmente, IntelliSense en C resalta las palabras clave _Alignas, _Alignof, _Noreturn y _Static_assert,pero no las macros equivalentes definidas en los encabezados estándar: alignas, alignof, noreturn y static_assert.

Dado que C17 es en gran medida una versión de corrección de errores de ISO C11, la compatibilidad de MSVC con C11 ya incluye todos los informes de defectos relevantes. No hay diferencias entre las versiones C11 y C17, excepto para la macro __STDC_VERSION__. Se expande a 201112L para C11 y 201710L para C17.

El compilador no admite la mayoría de las características opcionales de ISO C11. Varias de estas características opcionales de C11 eran características necesarias de C99 que MSVC no ha implementado por motivos de arquitectura. Puede usar las macros de prueba de características, como __STDC_NO_VLA__ para detectar los niveles de compatibilidad del compilador para características individuales. Para más información sobre las macros predefinidas específicas de C, vea Macros predefinidas.

  • No hay compatibilidad con multithreading, atómico o números complejos.

  • aligned_alloc falta compatibilidad, debido a la implementación del montón de Windows. La alternativa es usar _aligned_malloc.

  • La compatibilidad con el informe de defectos 400 no está implementada actualmente para realloc, ya que este cambio interrumpiría la ABI.

  • La compatibilidad con la matriz de longitud variable (VLA) no está planeada. Las VLA proporcionan vectores de ataque comparables a gets, que están en desuso y previsto que se elimine.

/std:clatest
La opción /std:clatest se comporta como el modificador /std:c++latest del compilador de C++. El modificador habilita todas las características del compilador y de la biblioteca estándar implementadas actualmente y propuestas para el siguiente borrador del estándar de C, así como algunas características en curso y experimentales.

Para más información, consulte la sección Características de la biblioteca estándar de C de Conformidad del lenguaje Microsoft C/C++.

Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.

  2. Seleccione la página de propiedades Propiedades de configuración>C/C++>Lenguaje.

  3. En Estándar de lenguaje C++ (o C, Estándar de lenguaje C), elija el estándar del lenguaje que se va a admitir en el control desplegable y, después, seleccione Aceptar o Aplicar para guardar los cambios.

Consulte también

/Zc:__cplusplus[-]
Opciones del compilador de MSVC
Sintaxis de línea de comandos del compilador de MSVC