Verständnisproblem Makro funktionsweise

Gast #2023931
Lesenswert?
• ▲
▼
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 #2023963
Lesenswert?
• ▲
▼
>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 #2023975
Lesenswert?
• ▲
▼
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

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.

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.