尝试使用宏而不是小函数来访问位置“index mod 256”上的数组:
static uchar08 ACC_MOD_256(uchar08 * buf, ulong32 index)
{
return buf[index % 256];
}
这很好,就像预期一样。
#define ACC_MOD_256(arr, ind) (arr[ind % 256])
然而,当代码用作宏时,模数(%)似乎不起作用。 索引第一次超过255时,我得到堆栈溢出。
我对宏很新,所以请原谅我,如果我在这里犯了一个明显的错误。
编辑: MCVE,问:
#define ACC_MOD_256(arr, ind) (arr[(ind) % 256])
int main()
{
int value;
int array[256] = {0};
fillArray(array);
for(int i = 0; i < 1024; i++)
{
value = ACC_MOD_256(array, i + 3);
}
return 0;
}
我现在可以看到,由于娇气的ossifrage,宏将解析这一行:
value = arr[i + 3 % 256];
显然相当于:
value = arr[i + (3 % 256)];
相当于:
value = arr[i + 3];
一旦'i + 3'大于数组,它将失败。