Die Funktion:Zeiger in C mit einer #define
#define ASSOC(port) (*(volatile bit_field *) (&port))
Der Funktionsaufruf:
#define SCLK ASSOC(PORTC).bit0
bit_field als Struktur definiert wie folgt aus:
typedef struct {
unsigned char bit0 :1, bit1 :1, bit2 :1, bit3 :1, bit4 :1, bit5 :1,
bit6 :1, bit7 :1;
} bit_field;
ich nicht tun wissen, wo & Port definiert ist.
Kann mir bitte jemand erklären, wie die Funktion gelesen wird und wie es funktioniert? Ich bin nicht sehr gut mit Zeigern und dieses Beispiel insbesondere ist sehr verwirrend mit "*" in der Front und am Ende und der "&" mit dem Port.
Danke
Das brauchte eine Weile um zu verstehen, aber ich verstehe es jetzt. Der verwirrendste Teil für mich war, warum er Bit_field als Zeigervariable definierte (mit dem *). Dies liegt daran, dass er den gesamten Inhalt des typedef-Bitfelds, das er erstellt hat, erhält. Dann referenziert er das Ganze [(* (volatile bit_field *) (& port))] mit der Außenseite *, denn wenn er dies nicht tut, wird er die Adresse dessen, was er gerade übermittelt (PORTC), zurückgeben. Also rät er die ganze Sache so, dass der Inhalt zurückgegeben wird und nicht die Adresse .... Ich verstehe endlich besser Zeiger :) – milan