3

嗨,我一直在尝试将 LWIP 移植到新的 arm 设备。编译代码时,我收到错误消息:

"lwip/lwip-1.4.0/src/include/lwip/memp_std.h:35:23: error: expected ')' before numeric constant"

当我转到这个文件时,我在该行找到了几个类似的宏,下面是几个类似的宏:

LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB,         sizeof(struct raw_pcb),        "RAW_PCB")

如果我通过定义取消激活 RAW 功能来消除对该宏的需求,则错误将移至下一个 LWIP_MEMPOL() 宏。

它似乎想在前面放一个')'的定义是这样定义的:

#define MEMP_NUM_RAW_PCB          1

未定义 RAW_PCB 而是“与 MEMP_ 结合”以在枚举中创建一个元素。

我试图用 -E 选项编译整个 ting 以获取人类可编辑的目标文件,看看我是否可以在 MEMP_RAW_PCB 出现的区域周围找到任何打开的 '(' 并将 MEMP_NUM_RAW_PCB 替换为 1 但我没有找到任何人工检查呢。

有什么建议可以在这里发生,或者我可以做些什么或寻找什么来找到错误的原因?

我应该补充一点,到目前为止,我没有调用 main() 中的任何 LWIP 代码或 main() 中使用的任何函数。

4

3 回答 3

2

我解决了它:

#ifndef MEMP_STD_H_ 
#define MEMP_STD_H_

... // memp_std.h codes ...

#endif //#ifndef MEMP_STD_H_
于 2014-03-07T08:55:59.723 回答
0

该错误表明您的括号不平衡。到目前为止,您提供的代码并未指出问题出在哪里,但由于)是意料之中的,这可能意味着错误实际上出现在您显示的代码行之前的代码行中。

检查您显示的行之前的代码(可能在使用之后gcc -E)以检查所有括号是否平衡。

于 2013-08-22T16:13:28.003 回答
0

如果您使用 dash-D 选项定义它,它将默认生成 1,例如:

gcc -D 'MAX(A,B) ((A) < (B)? (B) : (A))' ...

生成:

#define MAX(A,B) ((A) < (B)? (B) : (A)) 1

由于尾随 1,您会在error: expected ‘)’ before numeric constant发生替换的行收到消息,例如:

int maxval = MAX(i,j);
// generates: int maxval = ((i) < (j)? (j) : (i)) 1;

相反,如果您使用赋值运算符显式定义值,它将按照您预期的方式生成它。例如:

int maxval = MAX(i,j);
// generates: int maxval = ((i) < (j)? (j) : (i));
于 2017-06-30T21:08:48.473 回答