Frage von Phantom6208, 32

C++ - Präprozessor - float und int vergleichen, wie?

Ich habe folgenden code: (C++)

#define TEST_VAR 0.36

Jetzt muss ich herausfinden ob diese numer größer als 0 ist und kleiner als 1. Bei einem int würde das so gehen:

#define TEST_VAR 30 // more than 20 less than 40

#if TEST_VAR >= 40
#error error: TEST_VAR darf nicht größer / gleich 40 sein.
#endif

#if TEST_VAR <= 20
#error error: TEST_VAR darf nicht kleiner / gleich 20 sein.
#endif

aber mit floats funktioniert das nicht. Wie kann ich das machen?

Expertenantwort
von TeeTier, Community-Experte für programmieren, 17

Wenn du C++ benutzt, solltest du nicht programmieren wie in C! :)

Verwende anstelle von #define, #if und #error lieber constexpr und static_assert():

constexpr float f = 30.0f;

constexpr float fmin = 20.0f;
constexpr float fmax = 40.0f;

static_assert(f >= fmin, "f is too small");
static_assert(f <= fmax, "f is too big");

Ob du die Minimal- und Maximalwerte jetzt in Konstanten packst oder als magische Werte direkt in die Zusicherungen schreibst, bleibt dir überlassen. :)

Antwort
von priesterlein, 22

Schreibe sauberen Code und lerne, dass der Präprozessor Texte ersetzt sowie nur einfachste Vergleiche akzeptiert. Komplexe Datentypenoperationen mit Gleitkommazahlen gehören nicht in sein Schema.

Kommentar von priesterlein ,

Nachtrag: Wenn du unbedingt einen Vergleich in einen Präprozessor packen willst, kannst du die Zahlen skalieren, so dass sie kein Komma mehr enthalten. Aber der Präprozessor soll den Programmablauf nur vorbereiten und nicht durchführen.

Beispiel solcher "skalierter" Zahlen am Beispiel Microsofts zur Versionsunterscheidung: https://msdn.microsoft.com/de-de/library/windows/desktop/aa383745%28v=vs.85%29.a...

Keine passende Antwort gefunden?

Fragen Sie die Community