Lothar Miller schrieb:
> Hans schrieb:
>> Also diese Schreibweise ist mir bis heute ein Rätsel
> Mir tuts auch weh,
Dann solltest du dir mal überlegen, ob du dir als C-Programmierer die
Dinge nicht so zurecht legen kannst, dass sie für DICH lesbar sind.
Niemand hindert einen das zu tun.
1 | #define ERROR_LED (1 << PB0)
|
2 |
|
3 | PORTB |= ERROR_LED; // Error LED anschalten
|
oder
1 | #define ERROR_LED PB0
|
2 | #define ERROR_PORT PORTB
|
3 | #define TURN_ON( port, bit ) port |= 1 << bit
|
4 |
|
5 |
|
6 | TURN_ON( ERROR_PORT, ERROR_LED );
|
oder (wenn man sinnigerweise alle LED an einem Port gesammelt hat)
1 | #define ERROR_LED PB0
|
2 | #define READY_LED PB1
|
3 |
|
4 | #define LED_PORT PORTB
|
5 |
|
6 | #define LED_ON(led) LED_PORT &= ~( 1 << led )
|
7 | #define LED_OFF(led) LED_PORT |= ( 1 << led )
|
8 |
|
9 | if( error ) {
|
10 | LED_ON( ERROR_LED );
|
11 | LED_OFF( READY_LED );
|
12 | }
|
13 | else {
|
14 | LED_OFF( ERROR_LED );
|
15 | LED_ON( READY_LED );
|
16 | }
|
Mit ein wenig Makro Magie kann man sich in C leicht die Dinge so zurecht
legen, dass ein Blinder mit Stock auf 5 Meter Entfernung die Bedeutung
einer Anweisung erkennen kann UND der Code einfach wartbar ist. Die LED
musste wegen Hardware-Änderungen den Portpin wechseln: Kein Problem: 1
#define angepasst und den Rest erledigt der Compiler.
Nur tun muss man es.
Man beachte auch den Zugewinn an automatischer Dokumentation, der durch
LED_OFF( ERROR_LED );
ensteht, im Vergleich zu
PORTB &= ~( 1 << 0 ); // Fehler LED ausschalten
Der Kommentar ist direkt in den C-Code selber hineingewandert. Und das
ist immer ein gutes Zeichen: Jede Änderung, die einen Kommentar
überflüssig macht, ist eine gute Änderung.
Ein gutes Programm ist nicht nur dadurch gekennzeichnet, dass es
funktioniert. Ein gutes Programm ist auch so organisiert, dass es leicht
zu lesen und zu verstehen ist. Dazu gehört auch, dass man den Compiler
einspannt um sich selbst das Leben leichter zu machen.