1 | #define FLOAT 1.23
|
2 | #define INT 2
|
3 | #define FLOATEGER FLOAT * INT
|
ist FLOATEGER 2.46 oder 2 ? Kann ein float Ergebnis forciert werden?
|
Forum: Compiler & IDEs Präprozessor: Floating-Point zu Integer? (C++, Arduino)
ist FLOATEGER 2.46 oder 2 ? Kann ein float Ergebnis forciert werden? Kai schrieb: >
> > ist FLOATEGER 2.46 oder 2 ? Weder noch: es ist "1.23 * 2" > Kann ein float Ergebnis forciert werden? Da ist kein "Ergebnis", sondern nur Textersatz. Mhh, ich dachte, "er" vereinfacht Konstanten? Kai schrieb: > Mhh, ich dachte, "er" vereinfacht Konstanten? Der Compiler kann das schon. In deinem Beispiel ist FLOATEGER ein double (wenn du float willst musst du ein 'f' anhängen) weil 1.23 ein double ist und nach den Konvertierungsregeln wird der int dann auch zu einem double. Wenn du einen bestimmten Typen willst kannst du immer noch einen Cast dran schreiben. Kai schrieb: >
> > ist FLOATEGER 2.46 oder 2 ? > > Kann ein float Ergebnis forciert werden? ja, in C++ kannst Du mit static_cast, den Typen eines Ausdrucks vorgeben:
Torsten R. schrieb: > ja, in C++ kannst Du mit static_cast, den Typen eines Ausdrucks > vorgeben: Da kann man sich die ganzen #defines aber auch gleich sparen und stattdessen für alles echte Konstanten benutzen. Sebastian V. schrieb: > Kai schrieb: >> Mhh, ich dachte, "er" vereinfacht Konstanten? > > Der Compiler kann das schon. In deinem Beispiel ist FLOATEGER ein double Nein, es hat keinen Typ. Der ergibt sich erst später, nachdem das Makro ersetzt wurde. Das kann ggf. eben auch was unerwartetes sein, auch wenn's hier nicht so viele Möglichkeiten gibt. (short)FLOATEGER wäre z.B. vom Typ int und nicht etwa short, wie man annehmen könnte. Eben die typischen Makro-Probleme. :
Bearbeitet durch User
Rolf M. schrieb: > Torsten R. schrieb: >> ja, in C++ kannst Du mit static_cast, den Typen eines Ausdrucks >> vorgeben: > > Da kann man sich die ganzen #defines aber auch gleich sparen und > stattdessen für alles echte Konstanten benutzen. Das war aber nicht die Frage ;-) Torsten R. schrieb: > Kai schrieb: >>
>> >> ist FLOATEGER 2.46 oder 2 ? >> >> Kann ein float Ergebnis forciert werden? > > ja, in C++ kannst Du mit static_cast, den Typen eines Ausdrucks > vorgeben: > >
Aber wenn er schon C++ benutzen (soll), dann sollte er den CPP auch gleich für diesen Zweck entsorgen! In modernem C++ wird der CPP (fast) nur noch für include verwendet:
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.
|
|