【发布时间】:2010-11-09 23:06:35
【问题描述】:
我正在尝试从二维数组中读取值并将它们相乘以创建一个新的数组数组。这并不完全重要。
我创建了一个宏来读取值,而不是一个函数,理论上效率更高,但我遇到了一个我无法弄清楚的语法错误。问题线是
// 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
但我不太清楚问题是什么。
【问题讨论】:
-
“我创建了一个宏来读取值,而不是一个函数,理论上更高效”这就是你出错的地方。你为什么要编码理论优势?你应该为清洁和优雅而编码。当您完成后,您可以分析您的代码,找出慢的部分并修复它们。猜测是没有价值的。
-
另外,你不能只给定开始和大小就二维索引。你也需要一个宽度,所以你可以执行算术。请参阅弗拉德答案中的 cmets。
标签: c arrays macros syntax-error