Forum: Compiler & IDEs E - Funktion als Makro / Allgemeine Makro - Fragen


von Bernhard N. (bernieserver)


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

von Εrnst B. (ernst)


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

von Rolf Magnus (Gast)


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.

von Bernhard N. (bernieserver)


Lesenswert?

Vielen Dank für die Antworten. So in etwa habe ich mir das schon 
gedacht..

Gruß
Bernhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.