宏数组访问时出现语法错误

时间:2010-11-09 23:06:35

标签: c arrays macros syntax-error

我正在尝试从二维数组中读取值并将它们相乘以生成一个新的数组数组。这并不完全重要。

我创建了一个宏来读取值而不是函数从理论上讲更有效,但是我遇到了一个我无法弄清楚的语法错误。问题在于

    // compute and write the value for the result array
        writearr( result, n, r, c, ( READ(r, c, A*) * READ(c, r, A*) ) );

带有功能标题

    void newarr(int n, int* A, int* result)

宏是

    #define READ(a, b, arr) (arr[a][b])

当我尝试编译时,我得到了

    gcc -Wall -O2   -c -o placeholder.o placeholder.c
    placeholder.c: In function âwritearrâ:
    placeholder.c:26: error: expected expression before â[â token
    make: *** [placeholder.o] Error 1

但我无法弄清问题是什么。

2 个答案:

答案 0 :(得分:4)

首先,您需要将宏参数括在括号中。

#define READ(a, b, arr) ((arr)[a][b])

其次,您应该使用A代替A*进行解除引用。 A*根本无效,但您想要&A(实际上也不正确)?

第三,在这种情况下,宏实际上并没有带来任何优势,只是访问数组。

第四,你将A声明为一维数组,不能将其用作多维数组。获取一维数组的地址不允许您自动切换到“下一行”,因为C ++不知道该行的大小。

答案 1 :(得分:0)

我没有看到在这里使用READ宏的意义。如果您必须使用此语义,则需要执行以下操作:

writearr( result, n, r, c, ( READ(r, c, A) * READ(c, r, A) ) );