доброго дня всем. у меня macbook pro m2 (ios sonoma), использую visual studio code, учусь писать на с++. не получается писать некоторые функции и циклы на с++, выдается ошибка, указывающая на то, что у меня версия компилятора 98го года. запускаю в vs code код с проверкой:
int main() {
if (__cplusplus == 202002L) std::cout << "C++20\n";
else if (__cplusplus == 201703L) std::cout << "C++17\n";
else if (__cplusplus == 201402L) std::cout << "C++14\n";
else if (__cplusplus == 201103L) std::cout << "C++11\n";
else if (__cplusplus == 199711L) std::cout << "C++98\n";
else std::cout << "pre-standard C++\n";
}
на выходе получается ответ - "C++98"
проверяю расширение с++ внутри vs code - указано что компилятор последней версии, с++ 23.
проверки терминале самого мака тоже указывают на последнюю версию языка.
как быть?
не работают простейшие вещи типа range based for, которые видимо в языке появились уже после 98го года, но без них очень неудобно учиться.
1. Собираешь код как? Указываешь компилятору какой стандарт использовать?
2. Если на первый вопрос ответ "нет", то вероятно у тебя в компиляторе какая-то промежуточная версия, не соответствующая константам и просто срабатывает ветка else.
Для теста задай компилятору версию стандарта (ключ -std=c++20 ...) и проверь, что будет выдавать программа.
Дальше собери без ключа std и выведи значение макроса __cplusplus. А потом, подумаешь как лучше построить условие.
Думаю, тут надо использовать не равенство, а >= и вложенные ifы.
Хотя я не в курсе чем там VSC пользуется для сборки на МАСах. Может там что-то свое.
Для простоты можешь собрать руками из ком.строки и там задать этот параметр. Типа: g++ -std=C++20 main.cpp -o main
davidskyborn, Наверное потому что в твоем коде нет проверки для 23 стандарта и опять срабатывает блок else.
Сделай то, что я написал в коментариях, чтоб снять для себя этот вопрос.
И хорошо бы потренироваться для других значений этой опции, после изменения не забывай пересобрать программу с предварительным удалением предыдущей сборки.