7? Как это сделать нынче вообще?
Ты собирать на win7 хочешь с 20 стандартом?
Мне надо разрабатывать на Win10, но так, чтобы оно работало на Win7 тоже.
Я тут недавно ради лулзов и экспериментов завёл 20-й стандарт на WindowsXP. На 7-ке тоже должно заработать.
И как ты ради лулзов его завёл? Я упрашивал начальство, чтобы оно позволило отказаться поддержки XP, а ты ради лулзов это сделал.
А много мест использования с++20, не проще ли будет отказаться и снизить хотя бы до 17 стандарта?
Да, можно остаться и на 11-ом. Это уже лично моя хотелка, а не требования проекта. Хочу изучать C++20, но так чтобы применять ещё и в работе.
Очень просто. 1. Пишешь прогу кросс-платформенно, то есть, чтобы она могла работать и под виндами и под линуксом. 2. Чтобы не запариваться со сборкой и там и там - используешь cmake 3. Ставишь в Linux mingw-w64 (есть в убунтовских репах), и просто говоришь cmake в качестве C++-ного компилятора использовать 'i686-w64-mingw32-g++-posix', добавив (CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc -static-libstdc++". 4. Собирашь прогу под винду в линуксе. Правда тут стоит уточнить одну вешь. у меня гуя в проге нет, она чисто консольная. Но с гуем тоже можно справится. Есть ещё mxe
стандарт с++ никак не связан с версией Win
Всё в этом подходе прекрасно кроме простой программы с кодом: std::cout << _WIN32_WINNT << std::endl;, которая высрет в консоль 0x0A00
На сайте МС написано, что последняя VS, поддерживаемая на XP - 2019 с 16.7 https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 вот тут фичи описаны по версиям компиля, частичная поддержка С++20 там есть: https://learn.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=msvc-170
Какова цель такой программы?
Ну, гм, хм. Согласен, такого дефайна нет. (Но кто мешает его определить в CMakeLists.txt? или в тулчен-файле?
Он есть, но он не ограничивает использование вызовов WinAPI Win10
Стандарт c++ определяется компилятором а не операционной системой, на которой он работает. Следовательно для того чтобы тебе получить c++ с какого-то стандарта , тебе нужен компилятор, поддерживающий это Стандарт. На Windows 7 можно собрать разные компиляторы, поддерживающие этот Стандарт , и даже можно поставить компилятор на другую машину, например Windows 10, и там собирать приложение под Windows 7
Мне он кстати выдал 1282, что равняется 0x502 возможно это связано с тем, что я щас в 10-ке под веслом. Надо будет потом на живой хп-хе проверить
Ну есть такие интересные вещи в общем... https://github.com/microsoft/STL/blob/a62109595b6d89e08172fdf4beb75a2670fe0cc9/stl/src/atomic_wait.cpp#L138
это вообще макрос, и определяется на этапе компиляции
я в курсе. Просто майки в всл-е могли mingw тоже подшаманить. Но не, я глянул, 0x502 это вполне себе #define _WIN32_WINNT_WS03 0x0502 // Windows Server 2003 То есть в теории наносить ограничения он должен.
он влияет на набор доступных API в windows.h
Потому что это "простая программа" даже не удовлетворяет первый пункт?
Нет никаких ограничений у подключаемых библиотек вызывать API-функции, которых нет на целевой платформе, так как они объявлены в заголовочных файлах компилятора, но в рантайме их может не оказаться. По этой простой причине, например, Qt 6.x с лихвой может собраться таким компилятором, но к величайшему удивлению не будет работать на Windows 7.
Начнём с того, что заголовочные файлы компилятора и их содержимое никем не специфицированы и могут меняться как угодно без уведомления. Во-вторых, использование зарезервированных символов в коде — практика как минимум спорная. Ну и в-третьих, где, например, у того же clang в заголовках символ _WIN32_хотьчтонибудь?
Да, сторонние библиотеки могут и не проверять никаких дефайнов, они просто юзают системные API напрямую без проверок, чем собственно может заниматься и собранное этим компилятором приложение, как в примере с atomic wait.
Могут. Что автоматически делает их не кроссплатформенными. И, соответственно, не проходящими даже первый пункт.
STL не кроссплатформенна.
STL не используется уже много лет, если что. А если вы про std, то пишете ерунду.
Хоть 7, хоть Хп. Качаем последнюю студию, которая это поддерживает. И там пишем. Если всё-таки хотим чего-то большего, то можно взять последний clang, но использовать sdk целевой версии. Таким образом можно получить иногда чуть больше. Ну или лет через 10 также спокойно использовать последний clang, а sdk всё от той же старой 2019 студии
Свежо питанию, да серется с трудом. Без плясок с бубном вокруг той же 2019-ой студии, копаний в реестре, переносом частей из старых студий не обойдётся, если вдруг приспичит к ней прикрутить Windows 7.1 SDK.
Возможно придется что-то сделать да. Но возможность все же остаётся
Ну и опять же, речи в таком случае про C++20 уже не идёт.
Всё ещё идёт. Просто на уровне стдлибы будет то что есть сейчас и всё. Все новое, что заедет в компилятор, будет у вас
error : Element <LanguageStandard> has an invalid value of "stdcpp20".
Вывод тулкита Windows 7.1 SDK при включении современного компилятора 2022-ой студии. С ним возможна сборка только на компиляторе от 2010-ой студии.
Так речь шла про использование clang в таком сценарии, а не про msvc
Вообще, не понял что это. Под семёрку и 2019 всё успешно собирает. Собственно и кусок 20 стандарта там есть, и он включается для семёрки успешно
Какое апи? Какие функции? Вы свой пример забыли?
Обсуждают сегодня