Как скомпилировать с VS2017 для более старого стандарта C ++? - PullRequest
1 голос
/ 28 мая 2019

Я использую Visual Studio 2017 и мне нужно создать код, совместимый с VS2008 (C ++ 03 или C ++ 98). Есть ли переключатель для ограничения функций MSVC для C ++ 03?

Я использую CMake и попытался установить

set_property(TARGET tgt PROPERTY CXX_STANDARD 98)

Но это похоже только для того, чтобы убедиться, что компилятор поддерживает C ++ 98 или новее.

Любое решение, которое проверяет, использует ли код C ++ функции, более новые, чем функции, поддерживаемые VS2008, также будет работать. Мне просто нужно убедиться, что я случайно не использую слишком новые функции.

1 Ответ

2 голосов
/ 28 мая 2019

MSVC получил только стандартный переключатель в одном из обновлений VS2015 (точнее, в Обновлении 3), более или менее совместимом с C ++ 14, и поэтому существуют только переключатели для стандартов, начинающихся с C ++ 14 (плюс несколько более поздних функций, которые уже были реализованы на момент обновления).Все старые функции безоговорочно включены для обратной совместимости (и из-за всей работы, необходимой для модернизации уже реализованных функций для предыдущих стандартов, практически без выгоды).

См. Этот блог для получения дополнительной информации: https://devblogs.microsoft.com/cppblog/standards-version-switches-in-the-compiler/

Кроме того, обратите внимание, что в новых версиях MSVC было много улучшений соответствия, поэтому даже с переключателями std можно было написать код, который не работал бы или работал бы по-другому на старом компиляторе.

Лучшим решением было бы просто использовать набор инструментов VS2008 из визуальной студии VS2017, как описано здесь: https://devblogs.microsoft.com/cppblog/stuck-on-an-older-toolset-version-move-to-visual-studio-2015-without-upgrading-your-toolset/

Таким образом, вы будете уверены, что ваш код компилируется на более старом наборе инструментов, при использовании новейшей версии.IDE.

...