带有预处理指令的指针

时间:2018-07-05 20:42:14

标签: c c-preprocessor

正在处理代码,我已经看到了:

#define X(i)        ((array[i]).x[0])
#define Y(i)        ((array[i]).y[0])

typedef struct {
  int x[2];
  int y[2];
} coord_t;

coord_t* array = malloc(sizeof(coord_t)* 10);
int myX = X(5);

这使得对array的访问几乎用XY预处理程序指令进行了硬编码。我想做的就是将指针传递给预处理指令,例如:

#define X(myarray,i) myarray[i].x[0]

其中myarray可以是任何coord_t指针:

coord_t* a = malloc(sizeof(coord_t)* 4);
coord_t* b = malloc(sizeof(coord_t)* 12);

int myX = X(a,1);
int myotherX = X(b,6);

我已经做到了,并且编译时没有任何错误,但是我没有得到相同的结果。我的问题是,我可以这样#define X吗?

1 个答案:

答案 0 :(得分:-1)

#define X(myarray,i) myarray[i].x[0]