Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A /Zc:cmath opção do compilador substitui a implementação de runtime de funções matemáticas no cabeçalho do <math.h> runtime C e <cmath> o cabeçalho da biblioteca padrão C++ pelo libc da LLVM. Essa implementação fornece resultados arredondados corretamente em todos os modos de arredondamento.
Você precisa dessa opção para a avaliação em tempo de compilação das funções matemáticas da biblioteca padrão C++ que se tornam constexpr no C++23 ou posterior.
Essa opção é experimental.
Syntax
/Zc:cmath
Remarks
Você precisa da opção /Zc:cmath , juntamente com /std:c++23, para a avaliação em tempo de compilação das funções matemáticas que se tornam constexpr no C++23 por proposta P0533R9: constexpr para <cmath> e <cstdlib>LWG Problema 3834: Constexpr ausente para std::intmax_t funções matemáticas em <cinttypes>.
A /Zc:cmath opção está disponível a partir das Ferramentas de Build do MSVC versão 14.52. Ele está desativado por padrão.
Habilitar essa opção pode afetar o desempenho e a precisão das funções matemáticas declaradas em <math.h> e <cmath>.
Quando você usa /Zc:cmath, o conjunto de ferramentas do C++ é libvcmath-mt.lib vinculado automaticamente ou libvcmath-md.lib quando você chama funções matemáticas de um cabeçalho de biblioteca padrão. Essas bibliotecas são vinculadas estaticamente ao binário resultante.
Note
As diretivas de inclusão do sistema usam colchetes angulares, por isso #include <math.h> são reconhecidas, mas #include "math.h" não são.
Essa opção substitui as diretivas de inclusão do sistema que incluem <math.h> e <stdlib.h> com diretivas que incluem cabeçalhos de substituição de biblioteca padrão. A opção afeta <cmath> e <cstdlib> porque elas incluem <math.h> e <stdlib.h>. Os cabeçalhos de substituição diferem dos cabeçalhos UCRT correspondentes das seguintes maneiras:
As definições de função matemática são
noexcept, que entram em conflito com declarações que nãonoexceptsão . Consulte C2382. As correções potenciais são para remover declarações de encaminhamento desnecessárias ou para adicionarnoexceptdeclarações de encaminhamento.Funções e definições de macro que não fazem parte do padrão C++ não são fornecidas. Essa exclusão inclui as Constantes Matemáticas, como
M_PI. O<numbers>cabeçalho da biblioteca padrão fornece definições de conformidade de variáveis correspondentes. Para continuar usando essas constantes matemáticas, inclua<corecrt_math_defines.h>diretamente ._USE_MATH_DEFINESnão tem efeito quando você usa/Zc:cmath.
Background
Por padrão, o UCRT (Universal C Runtime) implementa as funções matemáticas declaradas e <math.h><cmath>. Windows mantém e implanta o UCRT, portanto, os resultados da função matemática podem variar Windows versão.
Quando você habilita /Zc:cmath, o libc da LLVM implementa essas funções matemáticas em bibliotecas vinculadas estaticamente nomeadas libvcmath-mt.lib e libvcmath-md.lib. As ferramentas de build do C++ implantam essas bibliotecas, não o sistema operacional Windows. Como essas funções retornam resultados arredondados corretamente, seus resultados são estáveis entre versões do sistema operacional e arquiteturas de hardware.
Para definir essa opção de compilador no Visual Studio
- Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.
- Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.
- Adicione
/Zc:cmathao painel Opções Adicionais:
Consulte também
/Zc (Conformidade)
/std (Especificar a versão padrão da linguagem)
Constantes matemáticas