Theoretisch geht es so, wie du es hingeschrieben hast.
Allerdings ist das gegen jede Konvention in C, sodaß es nicht
empfehlenswert ist.
Die Sprache selbst benutzt nämlich bei Vergleichen (z.B. i<j)
immer den Wert 1 als Ergebnis, wenn eine Bedingung als "wahr"
angesehen wird, und den Wert 0 im anderen Fall.
Umgekehrt wird bei einem Test irgendeines Ausdrucks auf "wahr"
oder "falsch" immer dir Regel angewendet "0 ist false, alles
andere true".
Siehe dazu jedes C-Buch...
Deshalb macht es keinen Sinn, selbst alles anders zu definieren.
Besser wäre:
1 | #define TRUE 1
|
2 | #define FALSE 0
|
3 | ...
|
Dann sind die Werte wieder gleich wie sonst auch in C.
Der Rest deines Beispiels könnte dann so stehen bleiben.
Andererseits könnte es auch deutlich vereinfacht werden:
1 | #define TRUE 1
|
2 | #define FALSE 0
|
3 |
|
4 | uint8_t test_funktion (void);
|
5 |
|
6 | void main (void)
|
7 | {
|
8 | if( test_funktion() ) // 0 wird automatisch als false gewertet, alles andere als true
|
9 | {
|
10 | mach_was ();
|
11 | }
|
12 | }
|
13 |
|
14 | uint8_t test_funktion (void)
|
15 | {
|
16 | if (taster_ist_gedrueckt)
|
17 | return TRUE;
|
18 |
|
19 | return FALSE;
|
20 | }
|
Nebenbei: wo kommt eigentlich der Wert für taster_ist_gedrueckt
her? Hält der sich an die "0 ist false"-Regel?
Hoffentlich ja.
Damit kann das Beispiel noch weiter verkürzt werden:
1 | uint8_t test_funktion (void);
|
2 |
|
3 | void main (void)
|
4 | {
|
5 | if( test_funktion() ) // 0 wird automatisch als false gewertet, alles andere als true
|
6 | {
|
7 | mach_was ();
|
8 | }
|
9 | }
|
10 |
|
11 | uint8_t test_funktion (void)
|
12 | {
|
13 | return taster_ist_gedrueckt!=0; // 0 ist false, alles andere true
|
14 | }
|
Falls taster_ist_gedrueckt ohnehin nur 0 oder 1 sein kann, dann
kann man !=0 im return auch noch weglassen.