Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Habilite os recursos de linguagem C e C++ suportados a partir da versão especificada do padrão de linguagem C ou C++.
Sintaxe
/std:c++14
/std:c++17
/std:c++20
/std:c++23preview
/std:c++latest
/std:c11
/std:c17
/std:clatest
Comentários
As opções de /std
estão disponíveis no Visual Studio 2017 e posterior. Eles são usados 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 seu código. As opções permitem que você desative o suporte para determinados novos recursos de idioma e biblioteca: aqueles que podem quebrar seu código existente que está em conformidade com uma versão específica do padrão de idioma.
O compilador Microsoft C++ no Visual Studio 2017 e versões posteriores não suporta modos de padrões C++ anteriores ao C++14 (/std:c++14
). Esse apoio não está previsto. Como uma solução imperfeita, é possível usar conjuntos de ferramentas de 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 de compilador mais antigos no Visual Studio, consulte Usar multiplataforma nativa no Visual Studio para criar projetos antigos.
Suporte a padrões C++
Detete se a opção /std
está em vigor durante uma compilação C++ com a macro _MSVC_LANG
pré-processador. Para obter mais informações, consulte Macros de pré-processador.
Importante
Como algum código existente depende do valor da macro __cplusplus
que está sendo 199711L
, o compilador MSVC não altera o valor dessa macro, a menos que você opte explicitamente pela configuração /Zc:__cplusplus
. Especifique /Zc:__cplusplus
e a opção /std
para definir __cplusplus
para o valor apropriado.
/std:c++14
Habilita recursos específicos do padrão C++14 implementados pelo compilador MSVC. Esta opção é o padrão para o código compilado como C++. Está disponível a partir da Atualização 3 do Visual Studio 2015.
Esta opção desativa o suporte ao compilador e à biblioteca padrão para recursos que são alterados ou novos em versões mais recentes do padrão de idioma. No entanto, ele não desabilita alguns recursos do C++17 já implementados em versões anteriores do compilador MSVC. Para obter mais informações, consulte Microsoft C/C++ language conformance. As tabelas indicam quais recursos do C++17 são habilitados quando você especifica /std:c++14
.
Os seguintes recursos permanecem habilitados quando a opção /std:c++14
é especificada para evitar alterações de interrupção para usuários que dependeram de recursos disponíveis no ou antes do Visual Studio 2015 Update 2:
-
Regras para
auto
com listas initadas -
typename
em parâmetros de modelo - Remoção de trígrafos
- Atributos para namespaces e enumeradores
- literais de caracteres U8
/std:c++17
Permite recursos e comportamento específicos do padrão C++17. Ele habilita o conjunto completo de recursos C++17 implementados pelo compilador MSVC. Esta opção desativa o suporte ao compilador e à biblioteca padrão para recursos novos ou alterados após o C++17. Ele desabilita especificamente as alterações pós-C++17 no C++ Standard e nas versões do Working Draft. Ele não desabilita atualizações de defeitos retroativos do padrão C++. Esta opção está disponível a partir do Visual Studio 2017 versão 15.3.
Dependendo da versão do compilador MSVC ou do nível de atualização, os recursos do C++17 podem não estar totalmente implementados ou totalmente em conformidade quando você especifica a opção /std:c++17
. Para obter uma visão geral da conformidade da linguagem C++ no Visual C++ por versão de lançamento, consulte Microsoft C/C++ language conformance.
/std:c++20
Habilita recursos e comportamento específicos do padrão C++20.
Habilita o modo de conformidade padrão fornecido pelo /permissive-
a menos que explicitamente substituído por /permissive
.
/std:c++23preview
Permite visualizar recursos e comportamentos específicos do padrão C++23. Disponível a partir do Visual Studio 2022 versão 17.13 Preview 4. Os recursos de visualização podem mudar e podem não ser compatíveis com ABI em todas as versões.
Esse switch será removido quando o switch /std:c++23
for implementado, momento em que os recursos do C++23 serão totalmente implementados e o ABI estável. Se nas propriedades do projeto linguagem C/C++> você especificar Preview - ISO C++ 23 Standard (/std:c++preview), ele mudará automaticamente para /std:c++23
média assim que o novo switch for implementado.
Essa opção difere da /std:c++latest
porque habilita apenas recursos que fazem parte do padrão C++23. Ele não habilita recursos experimentais ou em andamento.
/std:c++latest
Permite todos os recursos de compilador e biblioteca padrão atualmente implementados propostos no próximo rascunho de trabalho ISO C++, bem como alguns recursos experimentais e em andamento. Esta opção está disponível a partir do Visual Studio 2015 Atualização 3.
Dependendo da versão do compilador MSVC ou do nível de atualização, os recursos dos padrões C++ publicados ou os recursos propostos no rascunho de trabalho C++ atual podem não estar totalmente implementados ou totalmente em conformidade quando você especificar a opção /std:c++latest
. Recomendamos que você use a versão mais recente do Visual Studio para conformidade com padrões máximos. Para obter uma visão geral da conformidade da linguagem C++ e da biblioteca no Visual C++ por versão de lançamento, consulte Microsoft C/C++ language conformance.
Desde o Visual Studio 2019 versão 16.8, a opção /std:c++latest
habilitou o modo de conformidade padrão fornecido pelo /permissive-
a menos que explicitamente substituído por /permissive
.
Para obter uma lista de recursos de biblioteca e linguagem com suporte, consulte Novidades para C++ no Visual Studio.
A opção /std:c++latest
não habilita recursos protegidos pelo switch /experimental
, mas pode ser necessário ativá-los.
Observação
Os recursos de compilador e biblioteca habilitados pelo /std:c++latest
podem aparecer em um padrão C++ futuro. Os recursos que não foram aprovados estão sujeitos a alterações de quebra ou remoção sem aviso prévio e são fornecidos em uma base as-is.
Suporte a padrões C
Você pode invocar o compilador Microsoft C usando a opção /TC
ou /Tc
compilador. Ele é usado por padrão para código que tem 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 desativadas usando a opção de compilador /Za
, mas outras permanecem em vigor. Não é possível especificar a estrita conformidade C89. 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
Permite a conformidade com a ISO C11. Ele está disponível a partir do Visual Studio 2019 versão 16.8.
/std:c17
Permite a conformidade com a ISO C17. Ele está disponível a partir do Visual Studio 2019 versão 16.8.
Como o novo pré-processador é necessário para suportar esses padrões, as opções do compilador /std:c11
e /std:c17
definem a opção /Zc:preprocessor
automaticamente. Se você quiser usar o pré-processador tradicional (legado) para C11 ou C17, você deve definir a opção de compilador /Zc:preprocessor-
explicitamente. Definir a opção /Zc:preprocessor-
pode levar a 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 Windows SDK e UCRT instaladas pelo Visual Studio ainda não oferecem suporte ao código C11 e C17. É necessária uma versão atualizada do SDK do Windows e do UCRT. Para obter mais informações e instruções de instalação, consulte Instalar suporte a C11 e C17 no Visual Studio.
Quando você especifica /std:c11
ou /std:c17
, o MSVC suporta todos os recursos de C11 e C17 exigidos pelos padrões. As opções de compilador /std:c11
e /std:c17
permitem o suporte para estas funcionalidades:
_Pragma
restrict
-
_Noreturn
e <stdnoreturn.h> -
_Alignas
,_Alignof
e <stdalign.h> -
_Generic
e <tgmath.h> _Static_assert
O IDE usa configurações C para IntelliSense e realce de código quando seus arquivos de origem têm uma extensão de arquivo .c
ou quando você especifica a opção de compilador /TC
ou /Tc
. Atualmente, o IntelliSense em C destaca 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 bugs da 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 macro __STDC_VERSION__
. Ele se expande para 201112L
para C11 e 201710L
para C17.
O compilador não suporta a maioria dos recursos opcionais da ISO C11. Vários desses recursos opcionais do C11 eram recursos necessários do C99 que o MSVC não implementou por razões arquitetônicas. Você pode usar as macros de teste de recurso, como __STDC_NO_VLA__
, para detetar níveis de suporte do compilador para recursos individuais. Para obter mais informações sobre macros predefinidas específicas do C, consulte Macros predefinidas.
Não há suporte a multithreading, atômico ou número complexo.
aligned_alloc
suporte está faltando, devido à implementação de heap do Windows. A alternativa é usar_aligned_malloc
.Defect report 400 suporte está atualmente não implementado para
realloc
porque essa mudança quebraria o ABI.O suporte a VLA (variable length array) não está planejado. Os VLAs fornecem vetores de ataque comparáveis ao
gets
, que é preterido e planejado para remoção.
/std:clatest
A opção /std:clatest
se comporta como a opção /std:c++latest
para o compilador C++. O switch permite todos os recursos de compilador e biblioteca padrão atualmente implementados propostos no próximo rascunho do padrão C, bem como alguns recursos experimentais e em andamento.
Para obter mais informações, consulte a seção Recursos da biblioteca C Standard do Microsoft C/C++ language conformance.
Para definir essa opção de compilador no ambiente de desenvolvimento do Visual Studio
- Abra a caixa de diálogo Property Pages do projeto. Para obter mais informações, consulte Definir compilador C++ e criar propriedades no Visual Studio.
- Selecione a página de propriedades Configuration Properties>C/C++>Language.
- Em padrão de linguagem C++ (ou para C, C Language Standard ), escolha o padrão de idioma a ser suportado no controle suspenso e, em seguida, escolha OK ou Aplicar para salvar as alterações.
Ver também
/Zc:__cplusplus[-]
opções do compilador MSVC
de sintaxe de linha de comando do compilador MSVC