Ардуино код C++: можно ли использовать виртуальные функции и исключения?

15
задан Community 23 May 2017 в 12:32
поделиться

6 ответов

Среда Ардуино использует версию AVR набора инструментальных средств GCC. Код компилируется как C++, таким образом, можно использовать классы. Виртуальные функции возможны; vtables будут сохранены в разделе .data и иметь корректные адреса. На самом деле базовый класс Печати использует виртуальные функции для адаптации различных методов "печати" к различным выходным типам.

Исключения не поддерживаются из-за причин пространства кода. Среда Ардуино передает "-fno-исключения" командной строке компилятора. Посмотрите источник для проверки этого.

Шаблоны поддерживаются. Например, этот потоковый метод оператора вставки без стоимости хорошо работает с помощью простого шаблона и встроенного оператора.

14
ответ дан 1 December 2019 в 01:53
поделиться

Удобство использования функции не ограничены платформой, а скорее компилятором, который Вы используете.

я проверил бы Вашу документацию компилятора, какие функции языка поддерживаются.

3
ответ дан 1 December 2019 в 01:53
поделиться

Comeau, вычисляя имеет C++ к компилятору C, который поддерживает все функции C++. Не только виртуальные функции, или исключения, но также и экспорт. Вы должны были бы назвать Comeau, чтобы заставить это предназначаться для языка Ардуино, но должны быть не слишком твердыми.

2
ответ дан 1 December 2019 в 01:53
поделиться

Я использовал g ++ с этот Make-файл и запустился с этот код . C++ тратит впустую некоторое пространство. Но protothreads слишком прохладны для не использования.

1
ответ дан 1 December 2019 в 01:53
поделиться

В документации говорится:

язык Ардуино основан на C/C++ и поддерживает весь стандарт C конструкции и некоторые функции C++.

Это ничего не говорит о виртуальных функциях, что я могу найти.

я попробовал простую программу, и она компилирует прекрасный. Я не протестировал его на аппаратных средствах Ардуино все же.

РЕДАКТИРОВАНИЕ: Я также не протестировал исключения.

1
ответ дан 1 December 2019 в 01:53
поделиться

The Arduino software uses avr-gcc to compile sketches. The following limitations were sourced from the avrlibc FAQ (Can I use C++ on the AVR?):

Supported

  • Virtual functions
  • Constructors and destructors (including global ones)

Not supported

  • C++ standard functions, classes, and template classes (but see this port of uClibc++ for Arduino)
  • operators new and delete (attempting to use them will cause the linker to complain about undefined external references). This means that objects can only be created on the stack. If dynamic memory allocation is required it must be implemented using malloc() and free() of C types
  • Exceptions. Since exceptions are enabled by default in the C++ frontend, they explicitly need to be turned off using -fno-exceptions in the compiler options. This is done automatically by the Arduino IDE when it launches avr-gcc

Other issues

  • Some of the supplied include files are not C++ safe, i.e. they need to be wrapped with
    extern "C" { . . . }
11
ответ дан 1 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: