/Zc:cmath 컴파일러 옵션은 C 런타임 헤더 및 <cmath> C++ 표준 라이브러리 헤더에서 <math.h> 수학 함수의 런타임 구현을 LLVM의 libc로 바꿉니다. 이 구현은 모든 반올림 모드에서 올바르게 반올림된 결과를 제공합니다.
C++23 이상이 되는 constexpr C++ 표준 라이브러리 수학 함수의 컴파일 시간 평가에는 이 옵션이 필요합니다.
이 옵션은 실험적입니다.
구문
/Zc:cmath
Remarks
제안 P0533R9 /Zc:cmath 의해 C++23에 포함된 constexpr 수학 함수의 컴파일 시간 평가에는 constexpr 다음과 같은 옵션이 필요합니다. for <cmath> 및 <cstdlib>LWG Issue 3834: Missing constexpr for std::intmax_t math functions in <cinttypes>./std:c++23
이 /Zc:cmath 옵션은 MSVC 빌드 도구 버전 14.52부터 사용할 수 있습니다. 기본적으로 꺼져 있습니다.
이 옵션을 사용하도록 설정하면 선언된 수학 함수의 성능 및 정확도에 <math.h> 영향을 줄 수 있습니다 <cmath>.
사용하는 /Zc:cmath경우 C++ 도구 집합은 표준 라이브러리 헤더에서 수학 함수를 호출할 libvcmath-md.lib 때 자동으로 연결 libvcmath-mt.lib 됩니다. 이러한 라이브러리는 결과 이진 파일에 정적으로 연결됩니다.
메모
시스템 include 지시문은 꺾쇠 괄호를 사용하므로 #include <math.h> 인식되지만 #include "math.h" 인식되지 않습니다.
이 옵션은 표준 라이브러리 대체 헤더를 포함하는 지시문을 포함하는 <math.h><stdlib.h> 시스템 include 지시문을 대체합니다. 이 옵션은 포함 <math.h><stdlib.h>및 <cstdlib> 포함되기 때문에 영향을 줍니다<cmath>. 대체 헤더는 다음과 같은 방법으로 해당 UCRT 헤더와 다릅니다.
수학 함수 정의는
noexcept그렇지 않은 선언과 충돌하는 정의입니다noexcept. C2382를 참조하세요. 잠재적인 해결 방법은 불필요한 정방향 선언을 제거하거나 전달 선언에 추가하는noexcept것입니다.C++ 표준에 속하지 않는 함수 및 매크로 정의는 제공되지 않습니다. 이 제외에는 다음과 같은
M_PI수학 상수가 포함됩니다. 표준 라이브러리 헤더는<numbers>해당 변수에 대한 규칙적인 정의를 제공합니다. 이러한 수학 상수 사용을 계속하려면 직접 포함합니다<corecrt_math_defines.h>._USE_MATH_DEFINES을 사용할/Zc:cmath때 효과가 없습니다.
Background
기본적으로 UCRT(유니버설 C 런타임)는 선언된 <math.h> 수학 함수를 구현합니다 <cmath>. Windows UCRT를 유지 관리하고 배포하므로 수학 함수 결과는 Windows 버전에 따라 달라질 수 있습니다.
사용하도록 설정 /Zc:cmath하면 LLVM의 libc는 명명 libvcmath-mt.lib 되고 libvcmath-md.lib정적으로 연결된 라이브러리에서 이러한 수학 함수를 구현합니다. C++ 빌드 도구는 Windows 운영 체제가 아닌 이러한 라이브러리를 배포합니다. 이러한 함수는 올바르게 반올림된 결과를 반환하므로 운영 체제 버전 및 하드웨어 아키텍처에서 결과가 안정적입니다.
Visual Studio 이 컴파일러 옵션을 설정하려면
- 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.
- 구성 속성>C/C++>명령줄 속성 페이지를 선택합니다.
-
추가 옵션: 창에 추가
/Zc:cmath합니다.