Partilhar via


/std (Especificar versão padrão do idioma)

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:

/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:

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, _Noreturne _Static_assert, mas não as macros equivalentes definidas nos cabeçalhos padrão: alignas, alignof, noreturne 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

  1. 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.
  2. Selecione a página de propriedades Configuration Properties>C/C++>Language.
  3. 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