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

是错误之一,出现错误:

“'ARG_LIST'之前的预期初始化程序”

准确地说,有 18 个相同类型的宏会给出这个错误,在我删除“ARG_LIST”的那一刻,错误就消失了,但是因为这不是我创建的代码,所以我不想删除这部分.

我试图在网上找到解决方案,但找不到任何东西,现在我希望这里有人可以帮助我。

如果您需要更多信息,我会尽可能快地回答。

4

1 回答 1

2

我认为您可以安全地删除 ARG_LIST 部分。像 ARG_LIST 这样的宏在 C++ 的旧(1970 年代)版本中使用,其中函数/方法没有指定它们所采用的参数。例如,您声明了一个这样的函数:

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 回答