Norbert S. wrote:
> Hallo, kann mir vieleicht jemand weiterhelfen, warum bei folgendem Code
> der GCC einen Fehler ausgibt?
>
>
1 | > #define XYZ 10
|
2 | > #if PIND == XYZ
|
3 | > #error "test"
|
4 | > #endif
|
5 | >
|
>
> Fehlermeldung:
>
> ../lib_dip_switch.c:30:5: error: operator '*' has no left operand
Was ist PIND?
PIND ist ein Makro, das seinerseits zu so was expandiert
#define PIND *(volatile unsigned char*)0x20
Damit steht da nach der Makroexpansion
#if *(volatile unsigned char*)0x20 == XYZ
Und da wird offenbar der eigentlich als Dereferenzierungsoperator
gedacht erste * nicht als Dereferenzierung benutzt sondern als
Multiplikation. Macht ja auch Sinn: Wie soll der Präprozessor
einen Pointer dereferenzieren? Der Präprozessor macht Textersetzungen
und kann zur Not auch noch einfache Arithmetik machen (wenn ich
mich nicht irre), das wars dann aber auch schon.