#define und Zahl zu einem String zusammensetzen
-
Wie setzt man am besten einen String in einem #define und eine Zahl zu einem String zusammen
also z.b.
#define MValue "M_Value"
soll dann in einer schleife zusammengesetzt werden zu "M_Value1", "M_Value2" usw.
-
#define MValue(value) M_Value##value
-
Dann habe ich aber ich aber M_Value1 nicht als String.
-
#define MValue(value) ("M_Value" #value)
-
ok danke mal aber da ich das wie gesagt mit einer Schleife bilde
Habe ich nun nicht "M_Value1" sondern "M_Valuei"
-
Vermutlich ist das der falsche Ansatz.
Benutze für mehrere Variablen gleicher Art ein Array.
-
Es war schon der richige Ansatz. Ich brauch kein Array mit mehreren Variablen. Ich sollte die Namen haben.
-
Dann benutze eine Map...
-
Sorry. Aber ich sollte wirklich den Namen aus dem define haben.
-
Jetzt hab ichs kapiert... ich würde aber die Klammern weglassen, damit auch sowas geht:
#define MValue(value) "M_Value" #value printf("Wert: " MValue(1));
-
hottehüh schrieb:
ok danke mal aber da ich das wie gesagt mit einer Schleife bilde
Habe ich nun nicht "M_Value1" sondern "M_Valuei"Na dann verwende "sprintf"!
-
Wo? im Makro
-
Also so wäre es mir am liebsten:
Ich rufe das Makro auf und erhalte den entsprechenden String
also
CString name; for( int i=1; i<10; i++) { name = MValue(1); ... }
in name steht nun "MValue1" , "MValue2" usw. Geht das?
-
Warum nicht!?
Vielleicht solltest Du mal den Zusammenhang genauer erklären, was Du genau willst...
-
Edit:
CString name; for( int i=1; i<10; i++) { name = MValue(i); ... }
-
Warum nicht!?
Weil ich bisher noch keine Lösung habe die funktioniert.
-
hottehüh schrieb:
Warum nicht!?
Weil ich bisher noch keine Lösung habe die funktioniert.
Du hast mit #define angefangen und Deine Frage nicht genau gestellt.
Also haben wir Dir eine #define Lösung angeboten.Jochen hat Dir sprintf nahe gelegt. Warum gehst Du dem nicht nach?
Ansonsten lies mal ein wenig Tutorials.
Edit:
CString name; for( int i=1; i<10; i++) { name.Format(_T("MValue%d"),i); ... }
-
Hallo
Ja das weiß ich das das geht. Aber ich möchte eine define darum habe ich auch mit define angefangen.
Dann habe ich mein Beispiel gezeigt und gefragt ob es so möglich istCString name; for( int i=1; i<10; i++) { name = MValue(i); ... }
Und Jochen Kalmbach hat darauf geantwortet: Warum nicht.
Also nun meine Frage wie geht es mit einem define.
-
Das geht nicht... defines funktionieren nur zur Compilezeit!
-
Hm
Also wenn ich nun einer Funktion den Namen übergeben muss. Brauch ich immer zwei Zeilen.
name.Format(_T("MValue%d"),i); MyDunction(name);
Dachte ich könnte abkürzen mit:
MyFunction(MValue(i));
Schade.