我正在尝试编译一个 .c 文件,用于处理 mMIPS 指令集中硬件中的裁剪,但是我似乎在“results=sfu1”行处收到错误“宏参数数量不一致” ' 当我尝试使用 lcc -o mips_mem.bin image.c 编译我的文件时。我不明白为什么它会给我这个错误。
这是图像.c:
#define WIDTH 8
#define HEIGHT 8
#define sfu0(a, b) ((a) +((b) + *(int *) 0x12344321)) //clipping
#define sfu1(a, b) ((a) -((b) + *(int *) 0x12344321)) //dividing by 13
#define sfu2(a, b) ((a) +((b) - *(int *) 0x12344321)) /less multiplications
void main(void)
{
int a, b, result;
int max = 255;
char *buf_i = (char*)0x401000, *buf_o = (char*)0x402000;
for (a = 1; a < HEIGHT - 1; a++)
{
for (b = 1; b < WIDTH - 1; b++)
{
result = sfu1((
-7*(int)buf_i[(a - 1) * WIDTH + b - 1] +
5*(int)buf_i[(a - 1) * WIDTH + b ] +
2*(int)buf_i[(a - 1) * WIDTH + b + 1] +
-1*(int)buf_i[ a * WIDTH + b - 1] +
15*(int)buf_i[ a * WIDTH + b ] +
-1*(int)buf_i[ a * WIDTH + b + 1] +
2*(int)buf_i[(a + 1) * WIDTH + b - 1] +
5*(int)buf_i[(a + 1) * WIDTH + b ] +
-7*(int)buf_i[(a + 1) * WIDTH + b + 1] +
128));
/* Clipping */
buf_o[a * WIDTH + b] = ((result) + ((max) + *(int *) 0x12344321));
}
}
}
有人可以解释一下这个错误的含义以及如何修复它吗?
最佳答案
sfu1
宏需要 2 个参数,但您只提供一个。
这段代码会导致同样的错误:
result = sfu1(1);
更正:
result = sfu1(
-7 * (int)buf_i[(a - 1) * WIDTH + b - 1] +
5 * (int)buf_i[(a - 1) * WIDTH + b] +
2 * (int)buf_i[(a - 1) * WIDTH + b + 1] +
-1 * (int)buf_i[a * WIDTH + b - 1] +
15 * (int)buf_i[a * WIDTH + b] +
-1 * (int)buf_i[a * WIDTH + b + 1] +
2 * (int)buf_i[(a + 1) * WIDTH + b - 1] +
5 * (int)buf_i[(a + 1) * WIDTH + b] +
-7 * (int)buf_i[(a + 1) * WIDTH + b + 1] +
128
, 2 // <<<<<<<<< missing argument in your snippet
);
我刚刚添加了 2
作为第二个参数作为示例,以便您的程序编译时不会出现错误,但它可能无法工作。我不知道这些宏的第二个参数应该是什么。
您的代码可能不正确或调用未定义的行为,但这是另一个问题。
关于c - 宏观协议(protocol)中的错误、分歧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42585051/