Як виправити STM32 помилку: expected constructor, destructor, or type conversion before __declspec(dllexport)

Проблема:

При спробі скомпілювати прошивку для STM32-мікроконтролера ви бачите повідомлення про помилку компілятора на кшталт

stm32_declspec_error.cpp
myheader.h:23:12: error: expected constructor, destructor, or type conversion before ‘(’ token
   23 |  __declspec(dllexport) int myfunc(

Рішення

Ми раніше досліджували ту саму проблему для Linux-платформ.

__declspec(dllexport) — це специфічна для Windows функція, недоступна на платформах, відмінних від Windows, таких як ARM embedded API platform (наприклад, STM32). Щоб виправити це сумісним способом як з Windows, так і зі STM32, додайте наступний код або в заголовок, який включається у кожен файл, що містить __declspec(dllexport), або додайте його у кожен файл, де виникає помилка:

declspec_compat.h
#ifdef __ARM_EABI__
#define __declspec(v)
#endif

Це фактично ігноруватиме будь-який виклик __declspec() на рівні препроцесора.

Використовуючи __ARM_EABI__ специфічно, визначення не спрацює для ARM-платформ для Windows.


Дивіться схожі статті за категоріями: C/C++ Помилки GCC STM32