Forum: Mikrocontroller und Digitale Elektronik Wert auf Makro schreiben mittels Funktion


von unwissender_Neuling (Gast)


Lesenswert?

Hallo,

ich hab ein kleines Verständnisproblem bei einen Quellcode.

Eigentlich ist es recht "einfach", es gibt ein Makro "AUSGABE", mit dem 
eine Funktion aufgerufen wird, diese gibt wiederum eine Wert zurück.

Was mich dabei verwirrt ist: Wie die Funktion aufgerufen wird bzw. 
welcher Wert zurückgegeben wird.
1
#define AUSGABE (Daten() > 0)

Mich wundert was das " > 0 " zu bedeuten hat

Die Funktion "Daten" sieht so aus:
1
Daten(void)
2
{
3
   return(Rueckgabe);
4
}
Ich habe mir das ganze mittels Debugger angeschaut und "Rueckgabe" hat 
den Wert 4, wenn ich mir den Wert von "AUSGABE" anschaue steht da 1.

Wie kann durch "> 0" aus der 4 eine 1 werden?
Meine Vermutung ist, dass das Makro den Wert 1 annimmt, sobald ein Wert 
größer 0 als Rueckgabewert übergeben wird?

Die "Behauptung"
1
Daten() > 0
 ist erfüllt und somit wahr (=1).

Stimmt meine Vermutung oder liege ich falsch?

Danke

unwissender_Neuling

von ARM-Fan (Gast)


Lesenswert?

Richtig

von Sven P. (Gast)


Lesenswert?

MAKROS SIND KEINE FUNKTIONEN. Das hast du auch nicht direkt behauptet, 
aber ich glaub, du denkst es trotzdem :-)

Nimm dir mal nen gescheiten Compiler, z.B. gcc. Dann machste sowas hier:
1
#define BUMMSFALLERA()   (machwas() > 0)
2
3
int main() {
4
  if (BUMMSFALLERA()) {
5
    /* blabla */
6
  }
7
}

Dann schiebste das mal durch den Compiler, und zwar so:
1
$ gcc -E test.c

Und sowas kommt bei raus:
1
# 1 "test.c"
2
# 1 "<eingebaut>"
3
# 1 "<Kommandozeile>"
4
# 1 "test.c"
5
6
7
int main() {
8
   if ((machwas() > 0)) {
9
10
      }
11
}

Du siehst, es wird schlicht und einfach nur Text ersetzt, und zwar 
stupide und doof. Daher sind Makros an sich eigentlich garnicht soo 
schön.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.