mikrocontroller.net

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


Autor: unwissender_Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
#define AUSGABE (Daten() > 0)

Mich wundert was das " > 0 " zu bedeuten hat

Die Funktion "Daten" sieht so aus:
Daten(void)
{
   return(Rueckgabe);
}
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"
Daten() > 0
 ist erfüllt und somit wahr (=1).

Stimmt meine Vermutung oder liege ich falsch?

Danke

unwissender_Neuling

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
#define BUMMSFALLERA()   (machwas() > 0)

int main() {
  if (BUMMSFALLERA()) {
    /* blabla */
  }
}

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

Und sowas kommt bei raus:
# 1 "test.c"
# 1 "<eingebaut>"
# 1 "<Kommandozeile>"
# 1 "test.c"


int main() {
   if ((machwas() > 0)) {

      }
}

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.