Я работаю над проектом интеллектуального счетчика, ARM, компилятором keil. Я хочу скомпилировать часть более сложной логики под g ++ для запуска регрессионных тестов. У меня возникла проблема с некоторыми включенными файлами, определяющими интерфейс к стеку WMBus, который мы приобрели.Получение встроенного определения PACKED_STRUCT для компиляции под g ++
PACKED_STRUCT(typedef struct S_WMBUS_ADDR_T
{
/*! Manufacturer ID */
uint8_t pc_manufr[WMBUS_ADDR_MANUFR_LEN];
/*! Ident number */
uint8_t pc_ident[WMBUS_ADDR_IDENT_LEN];
/*! Version */
uint8_t c_version;
/*! Type */
uint8_t c_type;
}, s_wmbus_addr_t);
PACKED_STRUCT определяется в компиляторе чувствительной включают файл:
#elif defined (__GNUC__)
#define PACKED_STRUCT(__declaration__, __name__) \
__declaration__ __attribute__ ((__packed__)) __name__
...
#elif defined(__arm__)
#ifdef __ARMCC_VERSION
#define PACKED_STRUCT(__declaration__, __name__) \
__packed __declaration__ __name__
И я всегда получаю следующее сообщение об ошибке:
ошибка: типы могут не определены в типах параметров
ошибка: ЬурейаЯ декларация недействительна в объявлении параметра
Я не могу так никакой способа обойти это, кроме редактирования включать файл для удаления PACKED_STRUCT. Очевидно, что я не буду редактировать файлы напрямую, я их скопирую, отредактирую их и использую директиву -I, чтобы он нашел мои измененные файлы под G ++
Сообщение об ошибке, кажется, говорит, что вы не можете объявить тип как аргумент для макроса?
Примечание, даже если я переобъявить:
#define PACKED_STRUCT(__declaration__, __name__) \
__declaration__ __name__
Я использую -std = C++ 11 флага г ++, но удаление этого флага ничего не решает, но делает систему включает неудачу
Есть любым способом я могу определить PACKED_STRUCT, чтобы сделать немодифицированный код скомпилированным под g ++?
Вы можете 'undef' этот макрос и написать свой собственный в исходном коде, если применимо в вашем случае. – LPs
Я думаю, что «Объявление параметра» означает параметры функции, вставьте строку, которая запускает его. – a3f
undef не имеет смысла. Я не думаю, что компилятор gcc допускает параметр typedef как параметр. –