数组宏定义

时间:2013-02-08 15:12:54

标签: c r c-preprocessor

我正在尝试定义macro以将2D array语法转换为1D vector。即,对于12x12数组,matrix[i,j]应评估为matrix[12*i + j]。到目前为止我已经尝试了

#define matrix[i,j] matrix[12*i+j]

#define (matrix[i,j]) matrix[12*i+j]

#define matrix[(i,j)] matrix[12*i+j]

#define matrix([i,j]) matrix[12*i+j]`

我使用matrix[i,j]语法的原因是因为它将是从R代码调用的扩展,我希望项目的其他作者能够准确理解正在做什么。有没有办法用宏来做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以做的唯一方法是( ),而不是[]

#define matrix(i,j) matrix[12*i+j]

在代码中,您以这种方式定义矩阵

int matrix[12*12];
matrix(i,j) = 5;

答案 1 :(得分:1)

这样的事情可能有用:

#define TO_1D(m,x,y) (m[x*12+y])

int matrix[100];
TO_1D(matrix, 0, 4) = 13;

但我想知道为什么你不喜欢更安全的东西:

int data[100];
inline int& matrix(int x, int y)
{
   return data[x*12+y];
}

答案 2 :(得分:1)

最好只为计算定义一个宏,而不是解除引用。

#define X_DIM 12
#define Y_DIM 12
#define D21(x,y) (X_DIM*(x)+(y))

int my_matrix1[X_DIM*Y_DIM];
double my_matrix2[X_DIM*Y_DIM];

my_matrix1[D21(4, 3)];
my_matrix2[D21(2, 1)];

因此,您不仅限于宏中定义的唯一矩阵。

更基本的是,你为什么要尝试这样做?正常的多维数组语法就是这样做的。