Соответствие стандарту C++ в AVR-GCC
Я учусь программировать свое Arduino, но у меня довольно солидный опыт работы с C++, а это значит, что я был очень разочарован, обнаружив, что не могу использовать стандартную библиотеку C++. Я пытался выяснить, почему это так, и пока единственное правдоподобное объяснение состоит в том, что AVR-GCC не соответствует стандарту языка C++.
Теперь я знаю, что большинство компиляторов имеют незначительные отклонения от стандарта, но я думаю, что должно быть что-то действительно большое, что отделяет AVR-GCC от GCC, Clang или любого другого компилятора, который я использовал ранее. Как какая-то чрезвычайно важная особенность, которая полностью отсутствует, или что-то еще. Должна быть веская причина, почему я не могу использовать std::vector
например. Это просто слишком полезно, чтобы оставить без причины.
Так что же это? Что является гигантской дырой в диалекте AVR-GCC, из-за которой стандартная библиотека C++ не работает на Arduino? И я спрашиваю об этом не только из любопытства, потому что, если в языке есть гигантские дыры, мне нужно знать о них, прежде чем я начну впадать в какое-то неопределенное поведение, которого я не ожидал.
2 ответа
AVR-GCC - это, безусловно, работа для любителей. По сути, никто не хочет выполнять тяжелую работу по написанию реализации стандартной библиотеки. Написание стандартной библиотеки не является тривиальной задачей для настольных платформ, а ограниченные возможности Arduino только усложняют ее.
Я только что столкнулся с проблемой при попытке использовать гибкий массив (массив переменного размера) в структуре. Никаких жалоб на компилятор, но это просто не сработало. Мне пришлось перейти на использование указателя на массив, определенный вне структуры.