Makro in C

Janiiix3

Aktives Mitglied
28. Sep. 2013
1.333
10
38
Hannover
Sprachen
  1. ANSI C
  2. C#
Hallo,

ich habe ein Problem den folgenden Code zu verstehen ->



CodeBox C
/***** Configure IO *****/
#define configure_as_input(bit) {bit [B]## _DDR[/B] &= ~(1 << bit);}


Was dieses Makro machen soll, ist mir soweit klar. Nur warum schreibt man "##_DDR"? Also wieso Raute und Unterstrich?
Was hat die Raute und der Unterstrich in diesem Fall für eine Funktion / Bedeutung

Allen noch ein schönes Restwochenende ;)
 
Was dieses Makro machen soll, ist mir soweit klar. Nur warum schreibt man "##_DDR"?

Das ist eine Anweisung an den Preprocessor. Durch '##' fügt er zwei Strings zusammen und kann damit dann weiterarbeiten. Hier "erzeugst" du den Namen eines Macros.


CodeBox C
#define configure_as_input(bit) {bit ## _DDR &= ~(1 << bit);}

#define TASTER1  PA0
#define TASTER1_PORT  PORTA
#define TSATER1_DDR  DDRA
#define TASTER1_PIN  PINA

// du kannst somit folgendes machen ...

configure_as_input(TASTER1);
// Der Preprocessor macht zunächst hieraus
// TASTER1_DDR &= ~(1 << PA0);
// und TSASTER1_DDR hast du oben definiert.
// es ergibt sich dann ...
// DDRA &= ~(1 << PA0);


Noch ein Hinweis:
BB-Code wird in der Codebox deaktiviert. Fett-Schrift geht hier nicht.
 
Okay. Worunter könnte ich das in einem C-Buch finden? Stichwort?
 
Das mit den Rauten verstehe ich! Was macht der Unterstrich?
 


CodeBox C
{bit ## _DDR &= ~(1 << bit);}


Wozu steht das erste "bit" in der "Funktion" ? Also das zweite "bit" ist mir soweit klar (1<< bit)...
 
Dies
bit ## _DDR
wird als String behandelt, bestehend aus zwei Teilstrings. In meinem Beispiel ist der erste Teilstring "TASTER1", dies ist das Argument des Macros als String, der zweite Teilstring ist "_DDR". Beides zusammen gibt "TASTER1_DDR". Bei (1<<bit) wird das Argument TASTER1 gleich aufgelöst in PA0.

Wenn du doch weißt, was dieses Macro prinzipiell macht, dann schreib doch deinen Code wie du es gewohnt bist.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)