E - Funktion als Makro / Allgemeine Makro - Fragen

OP #2419589
Lesenswert?

Hallo liebes Forum,

ich habe bisher noch nicht viel mit C Makros gemacht. Ich möchte einfach 
div. Berechnungen von Konstanten nicht vom Controller errechnet haben, 
sondern vom Compiler.
Wenn ich jetzt einfach hingehe und folgendes schreibe:
1
#define VAR1         123
2
#define VAR2         234
3
#define VAR3         567
4
#define TESTFACTOR    (VAR1 * (VAR2 + VAR3) / 89)

wird der Faktor dann vom Präprozessor ausgerechnet oder einfach nur die 
Zahlen eingefügt und dann vom Controller berechnet? Bzw. durch den 
Compiler herausoptimiert?

Ansonsten habe ich noch eine Frage: Gibt es ein Makro für eine 
e-Funktion?

Gruß
Bernhard
#2419612
Lesenswert?

Bernhard N. schrieb:
> Ansonsten habe ich noch eine Frage: Gibt es ein Makro für eine
> e-Funktion?

Vorsicht, das Makro macht nur reine Textersetzung! das rechnet KEINE 
Konstanten im Voraus aus.
Das macht der Compiler nachdem die Makro-Textersetzung durch ist.

d.H. es braucht keine spezielle Makro-Exp-Funktion, nimm die Normale. Ob 
der Compiler die als Konstante vorberechnen kann, hängt nur von ihm 
ab...
=> Ausprobieren
Gast #2419618
Lesenswert?

Bernhard N. schrieb:
> Wenn ich jetzt einfach hingehe und folgendes schreibe:
> #define VAR1         123
> #define VAR2         234
> #define VAR3         567
> #define TESTFACTOR    (VAR1 * (VAR2 + VAR3) / 89)
>
> wird der Faktor dann vom Präprozessor ausgerechnet oder einfach nur die
> Zahlen eingefügt und dann vom Controller berechnet? Bzw. durch den
> Compiler herausoptimiert?

Option 3. Der Präprozessor fügt einfach nur die Zahlen ein, und sofern 
die Optimierungen an sind, berechnet der Compiler dann das Ergebnis und 
trägt das als fertige Konstante ein.

> Ansonsten habe ich noch eine Frage: Gibt es ein Makro für eine
> e-Funktion?

Nein. Aber GCC kann auch die Funktion zur Compilezeit auflösen und 
gleich das Ergebnis eintragen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren