Forum: Compiler & IDEs Mit dem Präprozessor runden (GCC / WinAVR)?


von Hans (Gast)


Lesenswert?

Bei der unten stehenden Anweisung hätte ich erwartet, dass der 
Präprozessor den Wert berechnet und dort einsetzt wo MVALUE auftaucht. 
Tut er aber nicht, sondern meckert den Aufruf einer unbekannten Funktion 
(round()) an. Was kann ich tun damit der Präprozessor den Wert 
berechent?

#define MVALUE round(AREF*1000/(1023*PROGRAD))

von martin (Gast)


Lesenswert?

wahrscheinlich  kannst Du  nicht  mit #define arbeiten und musst
stattdessen

const int  MVALUE round(AREF*1000/(1023*PROGRAD))

nehmen

Oder so.

von Klaus W. (mfgkw)


Lesenswert?

Der PP wird ohnehin weder runden, noch round aufrufen, sondern er macht 
halt stumpf seine Textersetzung und setzt round in den Quelltext ein.
Vrmtl. wird der Compiler dann meckern, daß er die Funktion nicht kennt; 
dagegen hilft dann das passende #include.

von g457 (Gast)


Lesenswert?

> [..] dass der Präprozessor den Wert berechnet [..]
> Tut er aber nicht, sondern meckert den Aufruf einer unbekannten Funktion
> (round()) an

Mecker der Präprozessor oder der Compiler? Ersterer sollte hier nur 
Textersetzung machen und deswegen nix zu meckern haben. Wenn zweiterer 
meckert dann such mal nach der Deklaration von round().

von Hans (Gast)


Lesenswert?

Vielen Dank für eure Antworten.

Verstanden: der Präprozessor macht "nur" Textersetzungen.

Mit <math.h> funktioniert es.

von DirkB (Gast)


Lesenswert?

Wenn AREF und PROGRAD Integerwerte sind, brauchst du round() nicht.

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.