2016-08-02 6 views
1

私は、スマートメータープロジェクト、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__ 

を私は常に、次のエラーメッセージが出ます:
エラー:タイプかもしれないがパラメータタイプで定義しないでください

エラー:パラメータ宣言に無効なのtypedef宣言

私はPACKED_STRUCTを削除するために、インクルードファイルを編集するよりも、この他の周りので、決してすることができます。明らかに私はファイルを直接編集せず、コピーして編集し、-Iディレクティブを使ってG ++下で私の修正したファイルを見つけるようにします

タイプを宣言できませんマクロへの引数として?私は再宣言しても

注:

#define PACKED_STRUCT(__declaration__, __name__) \ 
    __declaration__ __name__ 

私は-std = C++ 11のフラグを使用していますにG ++が、このフラグを削除すると、何も解決していないが、システムが

があるの失敗などが可能どのように私はPACKED_STRUCTを定義して、未修正コードをg ++でコンパイルすることができますか?

+0

あなたのケースで該当する場合は、そのマクロを「undef」してソースコードで自分自身を書くことができます。 – LPs

+0

私は、 'パラメータ宣言'は関数パラメータを意味し、それをトリガする行を貼り付けます。 – a3f

+0

undefは無意味です。私はgccコンパイラがパラメータとしてtypedefを許すとは思わない。 –

答えて

0

@ LPあなたは正しいですが、私は今なぜそうはわかりません。このコードはコンパイルされます: 何とか間違ったインクルードファイルが存在する必要があります。

typedef unsigned char uint8_t; 
#define WMBUS_ADDR_MANUFR_LEN 4 
#define WMBUS_ADDR_IDENT_LEN 4 

#define PACKED_STRUCT(__declaration__, __name__) \ 
    __declaration__ __attribute__ ((__packed__)) __name__ 

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); 

s_wmbus_addr_t hello; 
関連する問題