Präprozessor: Floating-Point zu Integer? (C++, Arduino)

#4981522
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.
#4981589
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.
#4981954
Torsten R. schrieb:
> Kai schrieb:
>>
1
>> #define FLOAT 1.23
2
>> #define INT 2
3
>> #define FLOATEGER FLOAT * INT
4
>>
>>
>> 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:
>
>
1
> constexpr float Ergebnis = static_cast< float >( FLOATEGER );
2
>

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:
1
constexpr float f = 1.23f;
2
constexpr int i = 2;
3
constexpr float f3 = f * i;

Antwort schreiben

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