2

Eclipse IDE でプログラムを実行しようとしていますが、上記のエラーが発生します。

#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif

tCRU_BUF_CHAIN_HEADER *CRU_BUF_Allocate_MsgBufChain ARG_LIST((UINT4 u4Size,UINT4 u4ValidOffsetValue));

[some more macros where this error comes]

#if defined(__cplusplus) || defined(c_plusplus)
}
#endif

はエラーの 1 つです。次のエラーが発生します。

「'ARG_LIST' の前に初期化子が必要です」

正確には、このエラーを発生させる同じタイプのマクロが 18 個あります。「ARG_LIST」を削除すると、エラーは消えますが、これは私が作成したコードではないため、この部分を削除したくありません。 .

ネットで解決策を見つけようとしましたが、何かを見つけることができませんでした。ここで誰かが私を助けてくれることを願っています.

さらに情報が必要な場合は、できるだけ早く回答するようにします。

4

1 に答える 1

2

ARG_LIST 部分は安全に削除できると思います。ARG_LIST のようなマクロは、古い (1970 年代) バージョンの C++ で使用されていました。関数/メソッドは、それらが取るパラメーターを指定していませんでした。たとえば、次のような関数を宣言しました。

tCRU_BUF_CHAIN_HEADER *CRU_BUF_Allocate_MsgBufChain();

そして、任意の数の引数で呼び出すことができます。

次に、完全な関数シグネチャが言語に追加されたとき、プログラマーはマクロを定義して、サポートされているコンパイラで型チェックを利用し、サポートしていないコンパイラと互換性のあるコードを作成しました。

#ifdef FULL_SIGNATURES_SUPPORTED
#define ARG_LIST(list) list
#else
#define ARG_LIST(list) ()
#endif

現在、すべてのコンパイラが完全な署名をサポートしているため、そのようなマクロを使用する意味はありません。

于 2012-11-29T08:34:36.733 に答える