Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Параметр /Zc:cmath компилятора заменяет реализацию математических функций среды выполнения в <math.h> заголовке среды выполнения C и <cmath> заголовке стандартной библиотеки C++ на libc LLVM. Эта реализация обеспечивает правильные округленные результаты во всех режимах округления.
Этот параметр необходим для оценки математических функций стандартной библиотеки C++, которые становятся constexpr в C++23 или более поздней версии.
Этот параметр является экспериментальным.
Syntax
/Zc:cmath
Remarks
Вам нужен /Zc:cmath вариант, а также /std:c++23для оценки математических функций во время компиляции, которые становятся constexpr в C++23 по предложению P0533R9: constexpr для <cmath> и <cstdlib>LWG Issue 3834: Отсутствует constexpr для std::intmax_t математических функций.<cinttypes>
Этот /Zc:cmath параметр доступен начиная с MSVC Build Tools версии 14.52. Он отключен по умолчанию.
Включение этого параметра может повлиять на производительность и точность математических функций, объявленных в <math.h> и <cmath>.
При использовании /Zc:cmathнабор инструментов C++ автоматически связывается с libvcmath-mt.lib математическими libvcmath-md.lib функциями из заголовка стандартной библиотеки. Эти библиотеки статически связаны с результирующий двоичный файл.
Note
Директивы включения системы используют угловые скобки, поэтому #include <math.h> распознается, но #include "math.h" не является.
Этот параметр заменяет системные директивы, которые включают <math.h> и <stdlib.h> директивы, включающие заголовки замены стандартной библиотеки. Этот параметр влияет и <cstdlib> потому, что они включают <cmath><math.h> и<stdlib.h>. Заменяющие заголовки отличаются от соответствующих заголовков UCRT следующими способами:
Определения математических функций являются
noexceptопределениями, которые конфликтуют с объявлениями, которые неnoexceptявляются. См. раздел C2382. Возможные исправления — удалить ненужные объявления пересылки или добавитьnoexceptв объявления пересылки.Функции и определения макросов, которые не являются частью стандарта C++, не предоставляются. Это исключение включает математические константы, такие как
M_PI. Заголовок<numbers>стандартной библиотеки предоставляет соответствующие определения соответствующих переменных. Чтобы продолжить использование этих математических констант, напрямую включите<corecrt_math_defines.h>._USE_MATH_DEFINESне действует при использовании/Zc:cmath.
Предыстория
По умолчанию универсальная среда выполнения C (UCRT) реализует математические функции, объявленные в <math.h> и <cmath>. Windows поддерживает и развертывает UCRT, поэтому результаты математических функций могут отличаться по Windows версии.
При включении /Zc:cmathlibc LLVM реализует эти математические функции в статически связанных библиотеках с именем libvcmath-mt.lib и libvcmath-md.lib. Средства сборки C++ развертывают эти библиотеки, а не операционную систему Windows. Так как эти функции возвращают правильные округленные результаты, их результаты стабильны в версиях операционной системы и аппаратных архитектурах.
Установка этого параметра компилятора в Visual Studio
- Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
- Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
- Добавьте
/Zc:cmathв область "Дополнительные параметры".
См. также
/Zc (Соответствие)
/std (определение стандартной версии языка)
Математические константы