#define
-
#define myDefine 3 //nun habe ich 2 Funktionen: f1(int i) & f2(char c); // wie wird dann myDefine behandelt, wenn es von beiden Funktionen aufgerufen wird? f1(myDefine); f2(myDefine); //muß ich casting???
Danke,
mn
-
f1(3); f2(3);
-
const int MeineKonstante = 3;
-
das war nur ein Beispiel, natürlich ist es einfacher zu machen, wie Ihr geschrieben habt, wenn es wirklich so ist, aber ich habe andere Sachen in meinem Programm, wie z.b: DEFAULT_BLABLA oder ähnliches, und es ist mir lieber sie oben mit
#define
zu definieren. Aber danke auf jeden Fall.
mn
-
/farbe FFFFFF
-
Hallo,
was hier passiert ist reine Textersetzung. D.h. überall wo myDefine steht, steht nachher 3. Und drei ist in C++ eine Integer-Konstante (Typ int).
Für den Aufruf von f2 wird zuvor also eine Standardkonvertierung von int nach char durchgeführt. Das hat mit dem define aber überhaupt nix zu tun.
-
das war nur ein Beispiel, natürlich ist es einfacher zu machen, wie Ihr geschrieben habt, wenn es wirklich so ist, aber ich habe andere Sachen in meinem Programm, wie z.b: DEFAULT_BLABLA oder ähnliches, und es ist mir lieber sie oben mit
#define
zu definieren.Ich bin immer bereit etwas neues zu lernen. Warum genau war es nochmal einfach #define zu verwenden, als eine globale (am besten modul-lokale) Konstante zu verwenden?
-
vermutlich ist mnab ein Ex-C-Coder...;)
-
also große Vorteile gibt's nicht außer daß es vielleicht schöner so ist, ich weiß es nicht, aber es wird oft so gemacht:
#define DEFAULT_PORT bla #define IRGENDWAS BLABLA
und so weiter. Ich hab aber mehrmals gelesen, daß man auf die "define" verzichten sollte, da es für den Compiler nicht so toll ist.
Grüße,
mn
-
Och, dem Compiler macht es nichts aus. Das Problem ist, dass er wild drauf los ersetzt und auch mal stören könnte. Defines sollte man nur benutzen wenn es sonst in C++ nicht zu machen ist, wie z.B. #include-Guards oder irgendwas Compilerspezifisches. Es gibt genug Alternativen, wie z.B.: inline-Funktionen, templates und const. Ich habe früher auch für Konstanten und kurze Funktionen das #define benutzt (weil ich mit C angefangen habe), bin aber inzwischen vollständig auf die sehr guten Alternativen von C++ umgestiegen.
-
Hallo.
Ich hab aber mehrmals gelesen, daß man auf die "define" verzichten sollte, da es für den Compiler nicht so toll ist.
Der Compiler hat damit nicht viel am Hut.
#define ALTER 3 cout << ALTER;
#define ist eine Präprozessor-Direktive, und ledliglich eine String-Ersetzung.
Man weißt den Präprozessor also an, alle vorkommen des Strings 'ALTER' gegen 3 auszutauschen.
Ich gehe sogar so weit zu behaupten, dass die #define-Anweisung in der vom Präprozessor produzierten Zwischendatei "futsch" ist. Übrigens führt #define keine Typenprüfung durch.BodPa
-
also große Vorteile gibt's nicht außer daß es vielleicht schöner so ist, ich weiß es nicht
Also ich weiß nicht, ob ein
#define foo bar
schöner ist, als ein
const Typ foo = bar;
Aber kommt es beim Programmieren wirklich auf die Schönheit an?
-
Ja. Aber das Tolle ist wohl, dass #define und const sich so verdammt ähnlich verhalten. Siehe auch
#include <ctime> #define foo1 std::time(0) time_t const foo2 = std::time(0);
Kopfschüttelnd.
-
@Danial E.: cih bezog mich eher auf Beispiele wie
#define ALTER 3 cout << ALTER;
(Ich will hiermit nicht den Author dieses Beispiels persönlich angreifen)
Das Makros etwas anderes als Konstanten sind ist mir sehr wohl bewusst. Entschuldige, das das falsch rübergekommen ist.
-
Irren ist menschlich.
Übrigens, Helium, kennst du noch einen "N-Fighter"? Das bin ich ;).
-
Klar kenn ich dich noch.