mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Makros C (#define Probleme)


Autor: The_Rock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe mal eine Frage
was bewikt eigentlich diese #define anweisung ?:
#define Function_xy {}

wenn ich voher in meiner Routine eine Funktion mit gleicher Name, aber 
so difiniert habe:
int Function_xy(int a , int b)
{
  return irgenwas;
}

MfG

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das bewirkt, das der Preprozesseor aus einem Aufruf

   Function_xy(a, b);

folgenden Text macht:

   {}(a, b);

Welchen Sinn das ergibt, kannst du als Hausaufgabe selbst überlegen

Autor: The_Rock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist NICHT das was ich meine!

die Funktion Function_xy(int a, int b) weiß schon was sie tue. nämlich 
meineswegens 2 Zahlen addieren und züruckgeben

angenommen irgewann in meiner Routine, daß ich so was schreibe:

#ifdef Aktiv
#define Function_xy {} //ist Function_xy {} == Function_xy(int a, int 
b)??
#endif

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
The_Rock wrote:
> Hallo Leute,
>
> ich habe mal eine Frage
> was bewikt eigentlich diese #define anweisung ?:
> #define Function_xy {}

Sie bewirkt das was jeder #define macht.
Sie sorgt dafür, dass ab der Stelle an der der #define vorkommt
bis zum Ende des Quelltextes, jeglicher Text 'Function_xy' mit
dem Text '{}' ersetzt wird.

Nicht mehr und nicht weniger.

>
> wenn ich voher in meiner Routine eine Funktion mit gleicher Name, aber

#define wirken ab ihrem Auftreten bis zum Ende des Quelltextes. Was
davor war interessiert den #define nicht.

Wenn dir das als Antwort nicht reicht, dann stell mal ein
möglichst komplettes Beispiel zusammen, welches so durch
den Compiler geht.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@The_Rock:

Dann verstehst du offenbar deine eigene Frage nicht... Dein letzter 
Beitrag ist jedenfalls völliger Unsinn.

Falls deine Frage ernst gemeint sein sollte:
Jeder C-Comiler hat einen Schalter, der ihn dazu veranlaßt, die Ausgabe 
des Preprocessors in eine Datei auszugeben. Mach das und sieh dir an, 
was der Compiler aus deinen Eingaben macht.

Autor: DerSchelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wirf mal einen Blick ins LST-File, dort ist es aufgedröselt.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das ist NICHT das was ich meine!

Es ist aber das, was der Compiler macht.

> die Funktion Function_xy(int a, int b) weiß schon was sie tue.

Das ist dem #define aber egal.

> #ifdef Aktiv
> #define Function_xy {} //ist Function_xy {} == Function_xy(int a, int
> b)??
> #endif

Nochmal: Der Präprozessor ist im Prinzip nur ein automatisierter 
Texteditor, der den Quelltext vor der Übergabe an den eigentlichen 
Compiler noch verändert. Ein
#define Function_xy {} 
sorgt dafür, daß im Quelltext nach diesem #define jedes Vorkommen von 
"Function_xy" durch "{}" ersetzt wird, bevor es an den Compiler 
weitergeht. Es macht also aus einem
Function_xy(int a, int b)
ein
{}(int a, int b)
Wenn du die Funktion irgendwo aufrufst, z.B. mit
Function_xy(3, 5);
wird auch dieser Aufruf ersetzt durch:
{}(3, 5);

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.