Liste von Parametern - wie gestalten?
-
Hallo zusammen,
zunächst mal ein generelles Dankeschön an die vielen Benutzer, die hier fleissig helfen. Dies ist zwar mein erster Beitrag, ich lese aber schon eine Weile mit und habe durch die existierenden Themen bisher noch keinen Account aufmachen müssen...
Heute ist es aber soweit und ich werde ich mal mit meiner Anwesenheit belästigen.Für viele wird dies sicher ein triviales Problem sein, aber ich finde im Moment einfach keinen Anfang, um meinen code sexy zu gestalten.
Ich möchte folgendes tun: Ich habe eine ganze Liste von Parametern, die ich in eine Datei schreiben will. Diese stammen aus #defines und enums an verschiedenen Stellen im Code. Ich benötige EINIGE davon und würde sie gerne im Stil von
DEFINE1 255
ENUM1_BLUB 4
ENUM1_BLUBBER 5in eine Datei schreiben.
Das schreiben ist dabei aboslut kein Problem, nur wie kann ich die Namen der Defines quasi untereinander schreiben, so dass man jederzeit leicht welche hinzufügen kann und so dass ich mit einer einfachen Schleife jeweils den Namen und anschließend den Wert wegschreiben kann? Ich habe bisher mit strings nicht viel gemacht...ich habe aber mal irgenwdann eine Methode gesehen, kann mich aber nicht erinnern, wie die realisiert war..ich erinnere mich an ganz viele "\" in einer Präprozessoranweisung, aber wie das genau ging, weiss ich leider nicht mehr.
Vielen Dank schonmal im Voraus!
Elore
-
Verstehe ich das richtig, du möchtest aus der Datei (nenne sie mal mydefines.def)
DEFINE1 255 ENUM1_BLUB 4 ENUM1_BLUBBER 5
mittels etwas à la
#super_duper_include "mydefines.def"
automatisch den folgenden Code erzeugen:
#define DEFINE1 255 enum ENUM1 { BULB = 4, BLUBBER = 5 };
?
Falls ja: Das übersteigt die Möglichkeiten des Präprozessors bei weitem. Du bräuchtest noch einen externen Makroprozesor, den du vor dem Präprozessor aufrufst. Selbst damit wird's schwierig, wenn du auf deinem Dateiformat bestehst.
Wozu soll das überhaupt gut sein? Selbstschreibender Code anscheinend. Aber normalerweise kennen Leute, die den Wunsch/Bedarf nach Metaprogrammierung verspüren, genauer die Möglichkeiten von C und bräuchten diese Frage gar nicht erst zu stellen. Ich spekuliere daher mal, dass ich dich vielleicht komplett falsch verstanden habe.
-
Ich hoffe ich habe das jetzt richtig verstanden.
D.h. die Variablen stehen so im Code:#define DEFINE1 255 #define ENUM1_BLUB 4 #define ENUM1_BLUBBER 5
und dein Problem ist jetzt heraus zu finden, wie eine Variable heißt? Korrekt?
Also wenn ich das jetzt wirklick richtig verstanden habe, dann wird das glaube ich nicht gehen, da der die Bezeichnung der Variablen zur Laufzeit nicht bekannt ist. Der Compiler hat die Bezeichnung schon in den eigentlichen Wert aufgelöst.
Du kannst dir aber mal die Postings unter diesem Link:
http://stackoverflow.com/questions/1164652/printing-name-and-value-of-a-define ansehen.
Dort wird das ganze mit der Hilfe von einigen Makros umgesetzt. Meiner Meinung auch ganz praktikabel.
Du könntet anstatt derprintf()
-Statements auch einfach
fprintf()
(z.B.) verwenden um das ganze in eine Datei zu schreiben.
Hoffe das hilft dir weiter.
Grüße
Fabi
-
Zwei Antworten, zwei völlig unterschiedliche Meinungen, was überhaupt die Frage war. Meine Diagnose: Undeutliche Frage
. Bitte präziser werden!
-
Elore schrieb:
Hallo zusammen,
zunächst mal ein generelles Dankeschön an die vielen Benutzer, die hier fleissig helfen. Dies ist zwar mein erster Beitrag, ich lese aber schon eine Weile mit und habe durch die existierenden Themen bisher noch keinen Account aufmachen müssen...
Heute ist es aber soweit und ich werde ich mal mit meiner Anwesenheit belästigen.Für viele wird dies sicher ein triviales Problem sein, aber ich finde im Moment einfach keinen Anfang, um meinen code sexy zu gestalten.
Ich möchte folgendes tun: Ich habe eine ganze Liste von Parametern, die ich in eine Datei schreiben will. Diese stammen aus #defines und enums an verschiedenen Stellen im Code. Ich benötige EINIGE davon und würde sie gerne im Stil von
DEFINE1 255
ENUM1_BLUB 4
ENUM1_BLUBBER 5in eine Datei schreiben.
Das schreiben ist dabei aboslut kein Problem, nur wie kann ich die Namen der Defines quasi untereinander schreiben, so dass man jederzeit leicht welche hinzufügen kann und so dass ich mit einer einfachen Schleife jeweils den Namen und anschließend den Wert wegschreiben kann? Ich habe bisher mit strings nicht viel gemacht...ich habe aber mal irgenwdann eine Methode gesehen, kann mich aber nicht erinnern, wie die realisiert war..ich erinnere mich an ganz viele "\" in einer Präprozessoranweisung, aber wie das genau ging, weiss ich leider nicht mehr.
Vielen Dank schonmal im Voraus!
Elore
Am besten ist wohl, du packst die Konstanten aus enums und defines in der gewünschten Reihenfolge ein Array und schreibst das Array als Ganzes weg. Beispiel:
static char array[] = {DEFINE1, BLUBB, BLUBBER, ...}; ... int ret = fwrite (array, sizeof(array), 1, fileptr); ...
-
Hallo zusammen!
Z hat es zum Teil erfasst..
Ich versuche es nochmal deutlicher auszudrücken...
Ich habe mehrere Dateien in einem Projekt, .h und .c
in denen gibt es verschiedene #defines und enums, deren Namen UND Werte ich in eine Datei schreiben möchte:Beispiel:
blub1.c:
#define BLUBBER 255 enum Wasser { Blase1 = 5, Blase2, Blase3 } Blubberblasen;
blub2.c:
#define KEINEAHNUNG 3
In der resultierenden ASCII Datei sollen Name und Werte der defines und enums stehen, die ich brauche. Dazu möchte ich in der .c Datei, in der ich auch die Daten wegschreibe, die Liste der betreffenden #defines und enums so gestalten, dass man sie leicht ändern kann.
Hintergrund ist folgender: Die #defines und die tlw dahinterstehenden Hamming Codes werden sich künftig immer mal ändern. Ich brauche die Werte daher immer aktuell. Die Datei wird von einem Python Script genutzt. Ich habe schon den Weg andersrum beleuchtet und geschaut, ob ich nicht mit einem python Parser ein Ergebnis hinbekomme, bin aber dann dabei hängen geblieben, dass im Code zu viele defines sind, die auf andere defines verweisen und dann wiederum in einem enum direkt zugewiesen werden.
Ich denke aber der Weg über ein static char array scheint mir am praktikabelsten. Kann ich dann über die gespeicherten Namen der defines und enums auch die Werte aufrufen? Die müssen ja dann als Paare abgespeichert werden...
Vielen Dank schonmal an die, die sich die Mühe gemacht haben mein etwas zu wirr ausgedrücktes Problem zu entziffern und darauf zu antworten
-
Das ist doch Masochismus pur.
Schreibe deine sich ändernden Parameter in eine externe Konfiguration (z.B. Datei, Datenbank, ...), aus denen dann dein Programm und dein Skript lesen.
Weiterhin hat das den Vorteil, dass du bei sich ändernden Parametern dein Programm nicht neu compilieren sondern nur die Konfiguration anpassen musst, ich hoffe das ist einleuchtend.
-
wenigestens treibts nicht nur mir selbst Tränen in die Augen...
Leider habe ich diese Option nicht und darf die Sourcen nicht anfassen