模数(%)在宏

时间:2017-01-24 10:25:00

标签: c arrays macros modulo

尝试使用宏而不是小函数来访问位置“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'大于数组,它将失败。

0 个答案:

没有答案