Makro in c (IAR)

Gast #4660661
Hallo,
ich habe mich immer gefreut hier meine Frage zu stellen und ich habe 
fast immer eine Antwort bekommen.
ich habe den folgende Code Teil gefunden aber leider nicht genau 
verstanden, wofür bracht man so ein Makro und welsche Vorteil hat er. 
was bedeutet diese befehle.

 N.B __root,__no_init.

Makro:

#define Item(Type, Str) typedef Type X_##Str##_n; __root __no_init 
static Type INT_##Str##_n @ "Variabl"; _Pragma("diag_suppress=Pe10") 
__root __no_init static Type Y_##Str##_k @ "Variabl" 
_Pragma("diag_default=Pe10");

Danke
Gast
Mit dem Makro werden 3 Datentypen mit unterschiedlichen Eigenschaften 
deklariert.
Und zwar mit dem Typ "Type".
"Str" dient dazu den Typen einen eindeutigen Namen zu verpassen.

Die Typen unterscheiden sich dann z.B ob sie oder ob sie nicht ( 
__no_init) initialisiert werden oder ob sie auch weg optimiert werden 
dürfen (__root).
Gast
Google "IVR _no_init _root" :

_no_init: Compiler initialisiert Variable nicht (wird sonst bei 
Programmstart mit 0 initialisiert)

_root: Compiler(eher Linker) darf beim Optimieren die Variable nicht 
entfernen, auch wenn sie ungenutzt ist.

Manuella schrieb:
> wofür bracht man so ein Makro

Hier: Zwei Variablen auf einmal deklarieren

Manuella schrieb:
> welche Vorteil hat er

Tipparbeit sparen, und nicht jeder muss über _no_init und _root bescheid 
wissen. Es reicht, wenn sich der Makro-Schreiberling auskennt, und die 
Verwendung seines Makros dokumentiert.
Gast
Hallo,
vielen dank für die schnelle Antwort
ok das habe ich verstanden.
aber was bedeutet das.
static Type INT_##Str##_n @ "Variabl"; _Pragma("diag_suppress=Pe10")
__root __no_init static Type Y_##Str##_k @ "Variabl"
_Pragma("diag_default=Pe10");
eigentlich alles sollte in eine Zeile dargestellt worden.
alles gehört zu den makro.
Gast
1
Item(float, Fooo)
2

3
// wird mit dem gcc-Preprozessor (habe kein IAR) zu 
4

5
typedef float X_Fooo_n; 
6

7
__root __no_init static float INT_Fooo_n @ "Variabl";
8

9
#pragma diag_suppress=Pe10
10
__root __no_init static float Y_Fooo_k @ "Variabl"
11
#pragma diag_default=Pe10
12
;

Was __root und __no_init bedeutet, wurde erwähnt, das @ steht in der 
IAR-Doku:
https://www.iar.com/support/tech-notes/compiler/linker-error-for-absolute-located-variable/

Wozu man den typedef und die Variablen namens INT_Fooo_n und Y_Fooo_k 
braucht, hat der Ersteller dieses wunderschönen Makros hoffentlich 
dokumentiert.

Antwort schreiben

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