/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.
- Regras para
auto
com listas iniciadas por chaves typename
nos parâmetros de modelo de template- Como remover trígrafos
- Atributos para namespaces e enumeradores
- Literais de caracteres u8
/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, ele habilita o conjunto completo de recursos do C++20 implementados pelo compilador MSVC. Observe que o Visual Studio 2022 versão 17.0 não dá suporte a std::format
, às extensões de formatação do C++20 <chrono>
e às fábricas de intervalo e adaptadores de intervalo de <ranges>
under /std:c++20
devido a alterações recentes nesses recursos imediatamente após a publicação do Standard.
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.
A /std:c++20
opção ativa o modo de conformidade padrão fornecido por, a menos que explicitamente substituído por /permissive-
/permissive
.
/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.
Desde o Visual Studio 2019 versão 16.8, a /std:c++latest
opção habilitou o modo de conformidade padrão fornecido por, a menos que explicitamente substituído por /permissive-
/permissive
.
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:
_Noreturn
e <stdnoreturn.h>_Alignas
,_Alignof
e <stdalign.h>_Generic
e <tgmath.h>
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
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.
Selecione a página de propriedades Propriedades da Configuração>C/C++>Linguagem.
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