Какова цель __cxa_pure_virtual?

1) Для чего предназначена c++ функция __cxa_pure_virtual()?

Чистые pure-virtual виртуальные функции могут c++ быть вызваны во время создания cxx / разрушения объекта. Если avr-gcc это произойдет, вызывается avr-gcc __cxa_pure_virtual(), чтобы cpp сообщить об ошибке. См. Where do "pure virtual function call" crashes come from?

2) Зачем c++ вам нужно определять это avr-gcc самостоятельно?

Обычно эта c++ функция предоставляется libstdc c++ ++ (например, в Linux), но avr-gcc avr-gcc и набор инструментов cpp Arduino не предоставляют cxx libstdc ++.

Среде разработки cxx Arduino удается избежать cxx ошибки компоновщика при сборке cpp некоторых программ, поскольку pure-virtual она компилируется с параметрами cxx "-ffunction-section avr-gcc -fdata-section" и связывает pure-virtual с "-Wl, - gc-section", что pure-virtual отбрасывает некоторые ссылки. к pure-virtual неиспользуемым символам.

3) Почему cpp допустимо кодировать __cxa_pure_virtual() как cxx бесконечный цикл?

Что ж, это cpp по крайней мере безопасно; это pure-virtual делает что-то предсказуемое. Было cpp бы полезнее прервать программу cxx и сообщить об ошибке. Бесконечный c++ цикл было бы неудобно отлаживать, если cpp только у вас нет отладчика, который c++ может прервать выполнение cpp и дать обратную трассировку pure-virtual стека.

c++

avr-gcc

pure-virtual

2022-05-24T01:01:24+00:00