Frage zu direktive #define
-
Hallo,
ist es möglich mir einen zweiten Bezeichner für double zu basteln, mittels #define? Ich dachte an so etwas:
#define REAL double int main(int argc, char *argv[]) { REAL x=3.2; return(0); }Viele Dank im voraus.
-
Natürlich ist es möglich, aber was würde dir das bringen, wenn du den urpsrünglichen Datentyp nicht erweiterst/veränderst... Außerdem solltest du Makros meiden, wenn's möglich ist.
-
JochenSt schrieb:
ist es möglich mir einen zweiten Bezeichner für double zu basteln, mittels #define? Ich dachte an so etwas:
Besser:
typedef double REAL;Es gibt für deine Anforderungen das Schlüsselwort typedef, das Makros vorzuziehen ist (Bedenke aber das der Compiler die Typen als gleich betrachtet, es nur unterschiedliche Namen für den gleichen Typen sind).
-
Ich hab mal die cpp-Tags hinzugefügt. Demnächst bitte selbst erledigen!
JochenSt schrieb:
Hallo,
ist es möglich mir einen zweiten Bezeichner für double zu basteln, mittels #define? Ich dachte an so etwas: [...]
Grundsätzlich möglich sit es. Allerdings sind Macros (so heißen die Dinger, die mit #define definiert werden) dafür eine ziemlich ungünstige Lösung. Besser gehts mit typedef:
typedef double Real; int main(int argc, char *argv[]) { Real x=3.2; return(0); }Ich habe den Namen auf Real geändert, da Bezeichner, die vollständig aus Großbuchstaben bestehen meistens Makros und Magic Numbers, ab und an auch Enum-Werten vorbehalten sind (Nicht als Sprachregel, sondern als Konvention).
-
dankeschön, funktioniert einwandfrei. Ich brauche einfach einen einfachen Schalter der mir zu Beginn meines Programms ein schnelles umstellen zwischen float und double ermöglicht, ohne groß den Quelltext ändern zu müssen.
-
Ein Makro mit #define xxx yyy ist ein simpler Textaustausch im Quellcode für den Compiler.
Aus #define REAL double wird einfach überall double genommen wenn der Compiler das übersetzen soll, mehr nicht.
Nehme in Berechnungen und Funktionen den grösstmöglichen Typ double oder long double. Frisst vielleicht etwas Speicherplatz, na und?
Dann brauchst du kein #define oder typdef mehr und kannst jederzeit ohne jeden Schalter nehmen, was du gerade willst float, double, oder long double.
Das Casting nach unten wird sauber erledigt.
-
berniebutt schrieb:
Ein Makro mit #define xxx yyy ist ein simpler Textaustausch im Quellcode für den Compiler.
Aus #define REAL double wird einfach überall double genommen wenn der Compiler das übersetzen soll, mehr nicht.
Nehme in Berechnungen und Funktionen den grösstmöglichen Typ double oder long double. Frisst vielleicht etwas Speicherplatz, na und?
Dann brauchst du kein #define oder typdef mehr und kannst jederzeit ohne jeden Schalter nehmen, was du gerade willst float, double, oder long double.
Das Casting nach unten wird sauber erledigt.Wenn man kein double braucht, ist float in rechenintensiven Programmen deutlich schneller.
-
ich entwickle ein Programm welches die Grafikkarte nutzt zum rechnen. Die Grafikkarte die ich auf meinem Testcomputer installiert habe kann nur single precision, deshalb brauche ich einen Umschalter.
-
Je nach Einsatzgebiet könnten sich Templates anbieten.
-
Zum Verständnis noch einmal nachgefragt:
--> woher kommen die Daten?
--> in welchem Datentyp?
--> in welcher auswertbaren Genauigkeit?
--> was soll damit angefangen werden?
--> wieviele können es sein?
-
Ethon schrieb:
Je nach Einsatzgebiet könnten sich Templates anbieten.
+1
Und wenn dann bitte typedef, für sowas Makros zu verwenden ist einfach nur falsch.