C ++错误“'[macroname]'之前的预期初始化程序”

时间:2012-11-29 08:19:44

标签: c++

我正在尝试使用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”的那一刻,错误就消失了,但是因为这不是我创建的代码我不想删除这部分。

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

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

1 个答案:

答案 0 :(得分:2)

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

tCRU_BUF_CHAIN_HEADER *CRU_BUF_Allocate_MsgBufChain();

你可以用任意数量的论点来调用它。

然后,当语言中添加了全功能签名时,程序员定义了宏来利用支持它的编译器中的类型检查,但仍然使代码与不支持它的编译器兼容:

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

现在所有编译器都支持完整签名,因此没有必要使用这些宏。