Je travaille sur un projet de compteur intelligent, ARM, compilateur keil. Je veux compiler une partie de la logique plus complexe sous g ++ pour lancer des tests de régression. J'ai un problème avec certains fichiers include qui définissent l'interface avec la pile WMBus que nous avons achetée.Obtenir la définition PACKED_STRUCT intégrée à compiler sous 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 est défini dans un compilateur sensible comprennent fichier:
#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__
Et je reçois toujours les messages d'erreur suivants:
erreur: types peuvent ne pas être défini dans les types de paramètre
erreur: typedef déclaration invalide dans le paramètre déclaration
Je ne peux donc pas moyen de contourner cela autrement que par la modification du fichier include pour supprimer le PACKED_STRUCT. Évidemment, je ne modifierai pas directement les fichiers, je les copierai, les éditerai et j'utiliserai la directive -I pour trouver mes fichiers modifiés sous G ++
Le message d'erreur semble indiquer que vous ne pouvez pas déclarer un type comme un argument à une macro?
Remarque même si je redéclarer:
#define PACKED_STRUCT(__declaration__, __name__) \
__declaration__ __name__
J'utilise le std = C++ 11 g ++ drapeau, mais la suppression de cet indicateur ne résout rien, mais fait un système de fail
est-il de toute façon je peux définir PACKED_STRUCT pour faire le code non modifié compiler sous g ++?
Vous pouvez 'undef' cette macro et écrire votre propre dans le code source, le cas échéant dans votre cas. – LPs
Je pense que 'déclaration de paramètre' signifie des paramètres de fonction, collez la ligne qui le déclenche. – a3f
Undef est inutile. Je ne pense pas que le compilateur gcc autorise un typedef en tant que paramètre. –