/std (especificar a versão padrão da linguagem)

Habilite os recursos de linguagem C e C++ com suporte da versão especificada do padrão de linguagem C ou C++.

Sintaxe

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

Comentários

As opções /std estão disponíveis no Visual Studio 2017 e posterior. Elas são usadas para controlar os recursos padrão da linguagem de programação ISO C ou C++ específicos da versão habilitados durante a compilação do código. As opções permitem desabilitar o suporte para determinados novos recursos de biblioteca e linguagem: aqueles que podem interromper o código existente que esteja em conformidade com uma versão específica do padrão de linguagem.

O compilador do Microsoft C++ no Visual Studio 2017 e versões posteriores não dá suporte aos modos padrão do C++ anteriores ao C++14 (/std:c++14). Esse suporte não está planejado. Uma solução alternativa, ainda que imperfeita, é usar conjuntos de ferramentas do compilador do Visual C++ mais antigos que não implementaram recursos de padrões posteriores. Para obter mais informações sobre como instalar e usar conjuntos de ferramentas do compilador mais antigos no Visual Studio, confira Usar vários destinos nativos no Visual Studio para criar projetos antigos.

Suporte a padrões C++

A opção /std em vigor durante uma compilação C++ poderá ser detectada pelo uso da macro de pré-processador_MSVC_LANG. Para obter mais informações, confira Macros do pré-processador.

Importante

Como um código existente depende do valor da macro __cplusplus ser 199711L, o compilador do MSVC não altera o valor da macro, a menos que você aceite explicitamente a configuração /Zc:__cplusplus. Especifique /Zc:__cplusplus e a opção /std para definir __cplusplus com o valor apropriado.

/std:c++14
A opção /std:c++14 habilita recursos específicos do padrão C++14 implementados pelo compilador do MSVC. Essa opção é o padrão para código compilado como C++. Está disponível a partir do Visual Studio 2015 Atualização 3.

Essa opção desabilita o suporte de biblioteca padrão e compilador para recursos alterados ou novos em versões mais recentes do padrão de linguagem. No entanto, não desabilita alguns recursos do C++17 já implementados em versões anteriores do compilador do MSVC. Para saber mais, confira Conformidade com a linguagem Visual C++. As tabelas indicam os recursos do C++17 que são habilitados quando você especifica /std:c++14.

Os recursos a seguir permanecerão habilitados quando a opção /std:c++14 for especificada para evitar alterações significativas para usuários que já assumiram dependências nos recursos disponíveis no Visual Studio 2015 ou antes do Visual Studio 2015 Atualização 2.

/std:c++17
A opção /std:c++17 habilita o comportamento e os recursos específicos do padrão do C++17. Ele habilita o conjunto completo de recursos do C++17 implementados pelo compilador do MSVC. Essa opção desabilita o suporte de biblioteca e compilador padrão para recursos novos ou alterados após C++17. Desabilita especificamente as alterações pós-C++17 em C++ Standard e nas versões do Working Draft. Não desabilita as atualizações retroativas de defeitos do C++ Standard. Essa opção está disponível a partir do Visual Studio 2017 versão 15.3.

Dependendo da versão do compilador do MSVC ou do nível de atualização, os recursos do C++17 talvez não sejam totalmente implementados ou estejam totalmente em conformidade quando você especificar a opção /std:c++17. Para obter uma visão geral da conformidade de linguagem C++ no Visual C++ por versão de lançamento, consulte Conformidade de linguagem Microsoft C/C++.

/std:c++20
A opção /std:c++20 habilita o comportamento e os recursos específicos do padrão do C++20. Disponível a partir do Visual Studio 2019 versão 16.11, ela habilita o conjunto completo de recursos do C++20 implementados pelo compilador do MSVC, exceto para std::format, as extensões de formatação <chrono> do C++20, e as fábricas de intervalos e adaptadores de intervalos de <ranges>. Esses recursos ainda estão disponíveis apenas em /std:c++latest.

A opção /std:c++20 desabilita o suporte do compilador e da biblioteca padrão para recursos novos ou alterados após o C++20. Desabilita especificamente as alterações pós-C++20 no C++ Standard e nas versões do Working Draft. Não desabilita as atualizações retroativas de defeitos do C++ Standard.

/std:c++latest
A opção /std:c++latest habilita todos os recursos do compilador e da biblioteca padrão atualmente implementados propostos para o próximo rascunho do padrão, assim como alguns recursos experimentais e em andamento. Essa opção está disponível a partir do Visual Studio 2015 Atualização 3.

Dependendo da versão do compilador do MSVC ou do nível de atualização, os recursos do C++17, C++20 ou C++23 propostos talvez não sejam totalmente implementados ou estejam totalmente em conformidade quando você especificar a opção /std:c++latest. É recomendável usar a versão mais recente do Visual Studio para conformidade máxima com os padrões. Para obter uma visão geral da conformidade de biblioteca e de linguagem C++ no Visual C++ por versão de lançamento, consulte Conformidade de linguagem Microsoft C/C++.

Nas versões do Visual Studio 2019 anteriores à versão 16.11, /std:c++latest é necessário para habilitar todos os recursos do compilador e da biblioteca padrão do C++20.

Para obter uma lista de recursos de linguagem e biblioteca com suporte, consulte O que há de novo para C++ no Visual Studio.

A opção /std:c++latest não habilita os recursos protegidos pela opção /experimental, mas poderá ser necessário habilitá-los.

Observação

Os recursos da biblioteca e do compilador habilitados por /std:c++latest poderão aparecer em um padrão C++ futuro. As funcionalidades que não foram aprovadas estão sujeitas à alteração da falha ou à remoção sem aviso prévio e são fornecidas no estado em que se encontram.

Suporte a padrões C

É possível invocar o compilador Microsoft C usando a opção do compilador /TC ou /Tc. Por padrão, é usado para código que tenha uma extensão de arquivo .c, a menos que seja substituído por uma opção /TP ou /Tp. O compilador C padrão (ou seja, o compilador quando /std:c11 ou /std:c17 não é especificado) implementa ANSI C89, mas inclui várias extensões da Microsoft, algumas das quais fazem parte da ISO C99. Algumas extensões da Microsoft para C89 podem ser desabilitadas usando a opção do compilador /Za, mas outras permanecerão em vigor. Não é possível especificar a conformidade C89 estrita. O compilador não implementa vários recursos necessários do C99, portanto, também não é possível especificar a conformidade do C99.

/std:c11
A opção /std:c11 habilita a conformidade ISO C11. Está disponível a partir do Visual Studio 2019 versão 16.8.

/std:c17
A opção /std:c17 habilita a conformidade ISO C17. Está disponível a partir do Visual Studio 2019 versão 16.8.

Como o novo pré-processador é necessário para dar suporte a esses padrões, as opções do compilador /std:c11 e /std:c17 definem a opção /Zc:preprocessor automaticamente. Se quiser usar o pré-processador tradicional (herdado) para C11 ou C17, defina a opção do compilador /Zc:preprocessor- explicitamente. Definir a opção /Zc:preprocessor- poderá causar um comportamento inesperado, e não é recomendado.

Observação

No momento do lançamento e por meio do Visual Studio 2019 versão 16.10, as bibliotecas do SDK do Windows e do UCRT instaladas pelo Visual Studio ainda não dão suporte ao código C11 e C17. Uma versão atualizada do Windows SDK e do UCRT é necessária. Para obter mais informações e instruções de instalação, consulte Instalar o suporte para C11 e C17 no Visual Studio.

Quando você especificar /std:c11 ou /std:c17, o MSVC dará suporte a todos os recursos de C11 e C17 exigidos pelos padrões. As opções do compilador /std:c11 e /std:c17 habilitam o suporte para estas funcionalidades:

O IDE usa as configurações de C para IntelliSense e o realce de código quando os arquivos de origem têm uma extensão de arquivo .c ou quando você especifica a opção do compilador /TC ou /Tc. Atualmente, o IntelliSense em C realça palavras-chave_Alignas, _Alignof, _Noreturn e _Static_assert, mas não as macros equivalentes definidas nos cabeçalhos padrão: alignas, alignof, noreturn e static_assert.

Como o C17 é em grande parte uma versão de correção de bug do ISO C11, o suporte MSVC para C11 já inclui todos os relatórios de defeitos relevantes. Não há diferenças entre as versões C11 e C17, exceto para a macra __STDC_VERSION__. Isso expande para 201112L para C11 e 201710L para C17.

O compilador não dá suporte para a maioria dos recursos opcionais de ISO C11. Vários desses recursos opcionais do C11 eram recursos obrigatórios do C99 que o MSVC não implementou por motivos de arquitetura. Você pode usar as macros de teste de recursos como __STDC_NO_VLA__ para detectar os níveis de suporte do compilador para recursos individuais. Para obter mais informações sobre macros predefinidas específicas de C, consulte Macros predefinidas.

  • Não há suporte a multithreading, atômico ou complexo em conformidade.

  • Suporte aligned_alloc está ausente devido à implementação de heap do Windows. A alternativa é usar _aligned_malloc.

  • No momento, o suporte ao Relatório de defeitos 400 não foi simplificado para realloc porque esta alteração interromperia a ABI.

  • Suporte para VLA (matriz de comprimento variável) não está planejado. VLAs fornecem vetores de ataque comparáveis a gets, que foram preteridos e estão planejados para remoção.

/std:clatest
A opção /std:clatest se comporta como a opção /std:c++latest do compilador C++. A alternância habilita todos os recursos do compilador e da biblioteca padrão atualmente implementados propostos para o próximo rascunho do padrão C, assim como alguns recursos experimentais e em andamento.

Para obter mais informações, consulte a seção de recursos da biblioteca C Standard da Conformidade de linguagem Microsoft C/C++.

Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio

  1. Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter mais informações, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.

  2. Selecione a página de propriedades Propriedades da Configuração>C/C++>Linguagem.

  3. No Padrão de Linguagem C++ (ou para C, Padrão de Linguagem C), escolha o padrão de linguagem para suporte no controle suspenso e,em seguida, escolha OK ou Aplicar para salvar as alterações.

Confira também

/Zc:__cplusplus[-]
Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC