Ich arbeite an einem Smart-Meter-Projekt, ARM, Keil-Compiler. Ich möchte einige der komplexeren Logik unter g ++ kompilieren, um Regressionstests auszuführen. Ich habe ein Problem mit einigen Include-Dateien, die die Schnittstelle zum WMBus-Stack definieren, den wir gekauft haben.Getting Embedded PACKED_STRUCT Definition zu kompilieren unter 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 in einem Compiler empfindlich Include-Datei definiert:
#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__
Und ich folgende Fehlermeldungen immer erhalten:
Fehler: Typen können nicht in den Parametertypen
Fehler: typedef Erklärung ihre Gültigkeit in Parameterdeklaration
Ich kann so keine Möglichkeit, um diese anders als durch die Datei gehören die Bearbeitung der PACKED_STRUCT zu entfernen. Offensichtlich werde ich nicht die Dateien direkt bearbeiten, ich werde sie kopieren, bearbeiten und verwenden Sie die -I-Direktive, um es zu finden meine modifizierten Dateien unter G ++
Die Fehlermeldung scheint zu sagen, dass Sie einen Typ nicht deklarieren können als ein Argument zu einem Makro?
Hinweis, auch wenn ich neu deklarieren:
#define PACKED_STRUCT(__declaration__, __name__) \
__declaration__ __name__
Ich bin mit dem -std = C++ 11-Flag g ++ aber dieses Flag Entfernen löst nichts, sondern macht ein System ausfallen umfassen
Gibt es Wie auch immer ich PACKED_STRUCT definieren kann, um den unmodifizierten Code unter g ++ kompilieren zu lassen?
Sie können dieses Makro "undef" und schreiben Sie Ihre eigene in Quellcode, falls in Ihrem Fall anwendbar. – LPs
Ich denke, 'Parameter Deklaration' bedeutet Funktionsparameter, fügen Sie die Linie, die es auslöst. – a3f
undef ist sinnlos. Ich glaube nicht, dass der GCC-Compiler einen Typedef als Parameter erlaubt. –