> switch(!PINA)
> {
> case PINC = 0x01: //macht das,wenn PC0
> break;
...
Das ist syntaktisch falsch: Nach case muß eine Konstante kommen.
(Karl heinz' Schreibweise 'case 1<<PC0:' ist zwar korrekt - es handelt
sich um eine Konstante, die zur Übersetzungszeit vom Compiler berechent
wird -, dürfte aber für Anfänger erst mal nur Verwirrung stiften!)
Der not-Operator ! ist folgendermaßen definiert:
!0 == 1
!n == 0 für alle n != 0
Es gibt in C aber auch einen bitweisen not-Operator: ~
Wenn Du den in Deinen switch einsetzt, passiert zumindest etwas
grammatikalisch Sinnvolles.
Allerdings bringt es nichts, außer einer zusätzlichen Invertierung des
Wertes (die ein einigermaßen brauchbarer Optimierer wieder
rausschmeißt).
Folgende Ausdrücke sind äquivalent:
switch (~PINA) {
case 1: ...
case 2: ...
}
switch (PINA) {
case ~1: ...
case ~2: ...
}
switch (PINA) {
case 0xfe: ...
case 0xfd: ...
}