1) Какова цель функции __cxa_pure_virtual ()?
Чистые виртуальные функции могут вызываться во время строительства / разрушения объекта. Если это произойдет, вызывается __cxa_pure_virtual () для сообщения об ошибке. См. Откуда происходят сбои «чисто виртуального вызова функции»?
2) Зачем вам нужно определять это самостоятельно?
Обычно эта функция предоставляется libstdc ++ (например, в Linux), но avr-gcc и набор инструментов Arduino не предоставляют libstdc ++.
Arduino IDE удается избежать ошибки компоновщика при сборке некоторых программ, потому что он компилируется с опциями "-ffunction-section -fdata-секции" и связывается с "-Wl, - gc-секции", в котором некоторые ссылки отсутствуют на неиспользованные символы.
3) Почему допустимо кодировать __cxa_pure_virtual () как бесконечный цикл?
Ну, это как минимум безопасно; это делает что-то предсказуемое. Было бы более полезно прервать программу и сообщить об ошибке. Однако бесконечный цикл будет неудобен для отладки, если только у вас нет отладчика, который может прерывать выполнение и возвращать стек обратно.