私は、スマートメータープロジェクト、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 ++でコンパイルすることができますか?
あなたのケースで該当する場合は、そのマクロを「undef」してソースコードで自分自身を書くことができます。 – LPs
私は、 'パラメータ宣言'は関数パラメータを意味し、それをトリガする行を貼り付けます。 – a3f
undefは無意味です。私はgccコンパイラがパラメータとしてtypedefを許すとは思わない。 –