Функция:указатели в C с #define
#define ASSOC(port) (*(volatile bit_field *) (&port))
Вызов функции:
#define SCLK ASSOC(PORTC).bit0
bit_field определяется как структура, как это:
typedef struct {
unsigned char bit0 :1, bit1 :1, bit2 :1, bit3 :1, bit4 :1, bit5 :1,
bit6 :1, bit7 :1;
} bit_field;
у меня нет знаете где & порт определен.
Может кто-нибудь объяснить, как функция читается и как она работает, пожалуйста? Я не очень хорош с указателями, и этот пример, в частности, очень запутан с «*» спереди и в конце и «&» с портом.
Спасибо
Это заняло у меня некоторое время, чтобы понять, но я понял это сейчас. Самая запутанная часть для меня заключалась в том, почему он определял bit_field как переменную указателя (с помощью *). Это потому, что он получает все содержимое созданного им типа typedef bit_field. Затем он умаляет все это [(* (volatile bit_field *) (& port))] с внешним *, потому что, если он этого не сделает, он вернет адрес того, что он передает (PORTC). Таким образом, он упускает из виду все это, поэтому содержимое возвращается, а не адрес .... Я, наконец, понимаю, что указатели лучше :) – milan