Ich mag würde ein Array von Strukturen, mit dem gleichen Element wiederholtinitializng ein C-Array mit sich wiederholenden Daten
struct st ar[] = { {1,2}, {1,2}, {1,2} };
, dh initialisieren Jedoch habe ich für die keine Code ausführen wollen, wünsche ich, dass die Das Layout des Speichers bei der Ausführung des Programms wäre so, ohne dass irgendwelche CPU-Anweisungen involviert wären (dies würde die Boot-Zeit bei sehr langsamen CPUs und relativ großen Arrays erhöhen).
Dies ist sinnvoll, wenn das Array als Mini-Ad-hoc-Datenbank (Karten-ID zu Struct) verwendet wird und wenn ein Standardwert für alle Datenbankwerte verwendet werden soll.
Meine beste Lösung war etwas von der Form zu verwenden
#define I {1,2}
struct st ar[SIZE_OF_ARRAY] = { I,I,I };
Damit wird der Compiler mich warnen, wenn ich zu viel mit bin oder zu wenig I
s. Aber das ist alles andere als ideal.
Ich denke, es gibt keine Lösung für das in ANSI-C, aber ich dachte, dass es vielleicht eine Makro-Missbrauch oder GCC-Erweiterung, die die Arbeit machen würde. Idealerweise hätte ich gerne eine Standardlösung, aber auch Compiler-spezifische würden ausreichen.
Ich dachte, dass ich irgendwie in der Lage wäre, ein Makro rekursiv zu definieren, so dass I(27)
würde zu 27 {1,2}
s aufgelöst werden, aber ich glaube nicht, dass das möglich ist. Aber vielleicht irre ich mich, gibt es irgendeinen Hack dafür?
Vielleicht würde Inline-Montage den Trick machen? Es wäre sehr einfach, ein solches Speicherlayout mit MASM oder TASM zu definieren, aber ich bin mir nicht sicher, ob es möglich ist, Speicherlayout-Anweisungen in C-Code einzubetten.
Gibt es einen Linker-Trick, der es dazu verleiten würde, den Speicher entsprechend meinen Befehlen zu initialisieren?
PS I wissen Ich kann automatisch C-Datei mit einem Skript generieren. Die Verwendung von benutzerdefinierten Skripts ist nicht wünschenswert. Wenn ich ein benutzerdefiniertes Skript verwenden würde, würde ich ein C-Makro REP(count,exp,sep)
erfinden und würde einen Mini-C-Präprozessor schreiben, um diesen mit exp sep exp sep ... exp {exp appears count time}
zu ersetzen.
Ja, BPP klingt ziemlich ideal für dieses Ding. – Macke
Eine gute Standardlösung - danke. –