Какой стандарт C++ поддерживает язык Arduino?
"Языком Arduino" (как они его называют) Arduino IDE 1, очевидно, является C++. Какой именно C++?
Я попытался разобраться в этом сам (Arduino IDE 1.8.13 для Arduino Uno), но не могу понять, какой стандарт C++ он поддерживает.
Судя по этим тестам, он поддерживает C++14
Поддерживаются шаблоны переменных C++ 14 (
шаблон<имя типа T> constexpr T pi = T(3.1415926535);<имя типа T>
)Поддерживаются лямбда-захваты C++ 14 (
автоматическая лямбда = [значение = 1] {возвращаемое значение;};
)Поддерживается устаревший C++ 14 (
[[устаревший]]int fdep(){возврат 5;}
)
Но не полностью:
- C++ 14-значные разделители не поддерживаются (
int j = 2'000;
)
Из этих тестов видно, что он даже поддерживает некоторые C++17:
- Поддерживаются вложенные определения пространств имен (
пространство имен X:: Y {int func(){ возвращает 1; } }
)
Но и не полностью:
- Символы UTF-8 не поддерживаются (
символ x = u8'a';
)
Если он частично поддерживает все, есть ли обзор, такой как список или таблица, где я могу его просмотреть?
@Thomas Weller, 👍12
Обсуждение1 ответ
Лучший ответ:
"Язык" Arduino-это не что иное, как набор функций и классов C++. Он не требует какого-либо конкретного стандарта C++.
Стандарт диктуется исключительно компилятором, который поддерживает используемое вами ядро (и настроен для использования с помощью флагов командной строки).
Разные ядра используют разные компиляторы. Разные версии одного и того же ядра используют разные компиляторы. Разные компиляторы обеспечивают разные стандартные уровни C++.
Большинство ядер используют GCC или какой-либо его вариант. Это может быть что угодно, от GCC 3.x.x до самого последнего выпуска (что бы это ни было на этой неделе).
В настоящее время ядро AVR использует GCC 7.3.0 и по умолчанию настроено на использование стандарта gnu++11 (хотя avr-gcc и связанные с ним библиотеки не имеют полной реализации STL). Вы, конечно, можете изменить это в файлах конфигурации, если хотите.
"не более чем набор функций и классов C++" - > И очень важная предварительная обработка, которая отсутствует, например, в PlatformIO., @AndreKR
@AndreKR Это на самом деле не часть языка - скорее, немного выдумки для удобства, которая в любом случае не должна существовать (и до недавнего времени все равно была ужасно нарушена)., @Majenko
Без этой предварительной обработки вам понадобилось бы что-то под названием "Защита заголовков", техника настолько странная, что мне трудно объяснить, почему она должна существовать., @AndreKR
@AndreKR Нет, это неправильно. Все, что делает предварительная обработка, - это очищает ваш код для функций и вставляет прототипы для вас в верхней части вашего скетча. Он ничего не делает с защитой заголовков, что вы всегда должны иметь в своих файлах заголовков, независимо от этого., @Majenko
Язык Arduino даже не полностью C++11, потому что [он не поддерживает std::erf()
в C99 и C++11](https://stackoverflow.com/q/68720871/995714). https://godbolt.org/z/dP1W1xfW6, @phuclv
@phuclv вы путаете компилятор и STL, которые являются двумя разными вещами. В True avr-gcc отсутствует полный STL, но он по-прежнему является синтаксисом C++11 (с расширениями GCC)., @Majenko
- C++ против языка Arduino?
- Что лучше использовать: #define или const int для констант?
- ошибка: ожидаемое первичное выражение перед токеном ','
- Ввести идентификатор чипа ESP32 в строковую переменную (новичок в Arduino/C++)
- Передача функции-члена класса в качестве аргумента
- Улучшенное циклическое переключение цветов RGB.
- Какие есть другие IDE для Arduino?
- Несовместимые типы при назначении «uint8_t {aka unsigned char}» на «uint8_t [1] {aka unsigned char [1]}»
Он поддерживает все, что поддерживает конкретное ядро и компилятор, которые вы используете, и настроен для поддержки. Включите подробную компиляцию, и вы увидите команды, которые она выполняет, включая флаги командной строки (
-std*
и т. Д.)., @Majenkoпосмотри вокруг https://arduino.github.io/arduino-cli/0.19/platform-specification/#recipes-to-compile-source-code, @Juraj
Я ожидаю, что ваши тесты дадут разные результаты на разных версиях Arduino IDE и разных платах., @Dmitry Grigoryev