Указатели с директивами препроцессора - PullRequest
0 голосов
/ 05 июля 2018

Работая над кодом, я видел это:

#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 почти жестко запрограммированным с директивами препроцессора X и Y. Я хотел бы передать указатель на директиву препроцессора, например:

#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 голосов
/ 19 июля 2018
#define X(myarray,i) myarray[i].x[0]
...