Wert auf Makro schreiben mittels Funktion

Gast #1030029
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
Gast #1030052
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.