Verständnisproblem Makro funktionsweise

Gast #2023931
Hi, ich arbeite mich gerade in fremdcode ein und bin auf folgendes 
gestoßen:
1
typedef struct
2
{
3
  uint32 shot;
4
  uint8  active;
5
}my_Struct;
6

7
#define def_timer_1ms(timer_Id) my_Struct timer_Id

Im code wird das nun so verwendet
1
void test (void)
2
{
3
   def_timer_1ms(my_timer_id);
4
   variable = function(my_timer_id);
5
}

my_timer_id wird niergends definiert.

Mein Verständnis ist jetzt, dass my_timer_id über das makro definiert 
wird?
Wenn ja, verstehe ich nicht genau was in der variablen drin steht.
Ich hätte jetzt eine #define wie folgt erwartet:
1
#define def_timer_1ms(timer_Id)  {timer_Id.shot=variable; timer_Id.active=TRUE;}

Gibt es hierzu eine kurze erklärung oder literatur?

Ich danke euch schonmal für die Hilfe :-)

gruß
mxt
Gast
>my_timer_id wird niergends definiert.

Doch. Es wird definiert. Schau Dir mal Deinen Code an.

1
typedef struct
2
{
3
  uint32 shot;
4
  uint8  active;
5
}my_Struct;
6

7
#define def_timer_1ms(timer_Id) my_Struct timer_Id

Das #define sagt, das an jeder Stelle im Sourcecode das auftreten von 
def_timer_1ms mit parameter timer_Id durch my_Struct timer_Id ersetzt 
wird.

In Deinem Quellcode
1
void test (void)
2
{
3
   def_timer_1ms(my_timer_id);
4
   variable = function(my_timer_id);
5
}

tritt genau def_timer_1ms auf.
Also wird es ersetzt durch
1
void test (void)
2
{
3
   my_Struct my_timer_id;
4
   variable = function(my_timer_id);
5
}

Damit ist my_timer_id auch definiert.
Das ist genau die Funktionsweise eines Makros.
Gast
Das hier:
1
#define def_timer_1ms(timer_Id)  {timer_Id.shot=variable; timer_Id.active=TRUE;}
Ergibt ja nicht die Definition einer Variablen sondern das setzte von 
Strukturelementen. Das setzt aber die Definition voraus.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 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.