Variable Variablen?
-
Hi,
Ich würde gerne einmal wissen, wie man variable Variablen in C/C++ definieren kann? Ich kenne die noch von PHP und da ging das, soweit ich das noch in Erinnerung habe, so:
$variable1 = "x"; $x = "test"; echo $$variable1; // Gibt "test" aus, da ich den Wert von $variable1 benutzt habe um $x anzusprechen.
-
Nein. Zur Laufzeit existieren die Namen der Variablen naemlich nichtmehr.
Meistens will man aber eine Assoziative Array wenn man soetwas machen will. zB eine hashmap.
-
Das geht nur bei Skriptsprachen, Java oder dem .NET-Framework. Bei C/C++ werden die Quelltexte in Maschinencode übersetzt, bei dem sämtliche Variablennamen und Funktionsnamen nicht mehr existieren. Du kannst zwar mit bestimmten "Tricks" in begrenztem Maße mit den Namen von Funktionen, etc arbeiten (mit Präprozessormakros) aber das ist natürlich nicht so flexibel möglich wie bei den genannten anderen Sprachen.
In den meisten Fällen stellt dies jedoch kein Problem dar, da man mit Pointern arbeiten kann um zum Beispiel Variablen anzusprechen, von denen man die Adresse hat.
-
Danke für die schnelle Antwort. Pointer waren auch meine zweite Wahl.
-
V 9 1 9 V schrieb:
Hi,
Ich würde gerne einmal wissen, wie man variable Variablen in C/C++ definieren kann?
gar nicht, C und C++ kennen keine variable Variablen, wie meine Vorgänger bereits erwähnt haben. Unter C++ hast du aber std::map, damit könntest du so etwas in der Art machen, ähnlich wie die asso. Array von PHP, wo das Key variabel ist.
-
supertux schrieb:
V 9 1 9 V schrieb:
Hi,
Ich würde gerne einmal wissen, wie man variable Variablen in C/C++ definieren kann?
gar nicht, C und C++ kennen keine variable Variablen
Und nebenbei gesagt, ist mir in C/C++ auch noch nichts untergekommen, wo man sowas hätte brauchen können. Dafür gibt es idR andere Möglichkeiten.
-
groovemaster schrieb:
supertux schrieb:
V 9 1 9 V schrieb:
Hi,
Ich würde gerne einmal wissen, wie man variable Variablen in C/C++ definieren kann?
gar nicht, C und C++ kennen keine variable Variablen
Und nebenbei gesagt, ist mir in C/C++ auch noch nichts untergekommen, wo man sowas hätte brauchen können. Dafür gibt es idR andere Möglichkeiten.
dito, mir auch nie, nicht mal mit PHP musste ich sowas benutzen.
-
Liegt warscheinlich daran, dass viele mit C angefangen haben und solche Möglichkeiten zu umgehen verstehen
-
Ohne jetzt den Thread korrumpieren zu wollen - Was haltet ihr generell von Reflection?
-
mmh - köntne man nicht ähnliches mit generischen Zeiger erreichen?
-
masterofx32 schrieb:
Ohne jetzt den Thread korrumpieren zu wollen - Was haltet ihr generell von Reflection?
Was hat das mit dem Thread zu tun?
Variable variablen haben nichts mit herkoemmlicher Reflection zu tun...
-
Wieso nicht? Ich kann mir mit Reflection dynamisch Typ- und Laufzeitinformationen holen. Darunter fällt auch der Inhalt von Variablen, zu denen ich den Namen kenne. Was sind für dich "herrkömmliche" Reflection?
-
abcguestabc schrieb:
Was sind für dich "herrkömmliche" Reflection?
Auf einem anderen Level. Soetwas wie 'Variable auslesen' wirkt wie ein Hack.
Reflection ist praktisch um zu testen ob ein bestimmtes Interface eingehalten wird oder um eine Funktion aufzurufen ohne den Typen zu kennen...
Variable variablen braucht man dagegen eigentlich nie, weil sie nichts anderes als ein Array sind - und das kann man auch sauberer machen.
zB in PHP sieht man manchmal soetwas
global $ { $foo };
das ist nichts anderes als GLOBALS[foo] nur unlesbar.oft sieht man variable variablen aber auch so:
{var.$i}
was ja im prinzip wieder nur ein array ist.während reflection auf einer anderen ebene verwendet wird, zB instanziierungen von Objekten deren Typ man nur zur laufzeit kennt.
-
Aber variable Variable kann ich mir mit Reflections recht gut nachbilden ohne eine Tabelle zu nutzen.
Na ja, liegt wohl vor allem daran, dass ich Reflections sehr weit fasse. Das geht vom abfragen von Typinformatioen über das enumerieren von Objekten Methoden, Variablen, ... bis hin zum dynamischen Generieren von ausführbaren Code zur Laufzeit.
-
supertux schrieb:
dito, mir auch nie, nicht mal mit PHP musste ich sowas benutzen.
Dann hast du wahrscheinlich noch nicht viel mit PHP gemacht. Ich habe jetzt gerade kein Beispiel, aber ich habe sehr viel mit PHP programmiert und variable Variablen waren oft sehr sinnvoll, z.B. in einem Template-System.
AFAIK benutzt die Eingabemaske des Posting erstellens variable Variablen. Oder irgendein anderes Formular.Ich habe es jetzt mit Pointern gelöst, was eine wesentlich bessere Methode ist. Ich habe halt noch in PHP gedacht.
-
V 9 1 9 V schrieb:
supertux schrieb:
dito, mir auch nie, nicht mal mit PHP musste ich sowas benutzen.
Dann hast du wahrscheinlich noch nicht viel mit PHP gemacht.
doch, sehr viel sogar. Aber ich hab sowas nie gebraucht, dafür habe ich schöne PHP Arrays, die variable Keys haben, und das genügt mir.
-
Shade Of Mine schrieb:
masterofx32 schrieb:
Ohne jetzt den Thread korrumpieren zu wollen - Was haltet ihr generell von Reflection?
Was hat das mit dem Thread zu tun?
Variable variablen haben nichts mit herkoemmlicher Reflection zu tun...
Ja, das habe ich ja eingeräumt, aber trotzdem nett, dass du es nochmal erwähnst.
Reflection bedeutet, dass man die Möglichkeit hat, zur Laufzeit Informationen über seine Programmstruktur zu erhalten. Und wenn man in PHP zur Laufzeit mit dem Variablennamen arbeitet, um auf den Wert der Variablen zuzugreifen, dann ist das definitiv Reflection.