0

構文をmacroに変換するを定義しようとしています。つまり、配列の場合、 に評価される必要があります。これまで私は試してきました2D array1D vector12x12matrix[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 コードから呼び出される拡張機能になるためです。プロジェクトの他の作成者には、何が行われているかを正確に理解してもらいたいと考えています。マクロでこれを行う方法はありますか?

4

3 に答える 3

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];
}
于 2013-02-08T15:21:01.577 に答える
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)];

したがって、マクロで定義された一意のマトリックスに限定されません。

もっと根本的に、なぜあなたはそれをやろうとしているのでしょうか? 通常の多次元配列構文は、まさにそれを行うために既に存在します。

于 2013-02-08T16:06:55.573 に答える
1

あなたができる唯一の方法は、一緒であり、一緒( )ではない[]

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

コードでは、この方法で行列を定義します

int matrix[12*12];
matrix(i,j) = 5;
于 2013-02-08T15:16:22.803 に答える