Es gibt definitiv keinen Standardweg.
Wenn Sie bereit sind, den Code zweimal zu kompilieren, können Sie einen Präprozessor-define-Wrapped-Codepath nur für den zweiten Durchlauf aktivieren, der Debugging-Informationen von den Kompilierungseinheiten liest, die beim ersten Durchlauf erzeugt wurden, um die Elementnamen zu erhalten. Sie können auch den Quellcode analysieren, um die Liste zur Laufzeit zu erhalten.
Schließlich können Sie Präprozessormakros verwenden, um die Struktur zu definieren, und die Makros geben auch einen Eintrag in einer anderen Variablen für jedes Strukturelement aus, wodurch zwei nicht direkt verknüpfte Elemente effektiv synchronisiert werden.
Hier ist ein Proof of Concept:
%Vor%Dies ist die Ausgabe:
%Vor%Sie können es verbessern, um komplexere Elementtypen besser zu unterstützen und eine Liste mit Namen der Mitglieder zu erstellen.
Nein, das ist nicht möglich.
C ist eine statisch typisierte Sprache ohne Reflektion. Typnamen haben nach der Kompilierungsphase keine Bedeutung und es ist nicht einmal der Fall, dass eine bestimmte Variable im Binärcode überhaupt sichtbar ist. Der Compiler hat eine Menge Freiheit, um zu optimieren und neu zu ordnen, solange sich das Programm verhält, wie vom Sprachstandard beschrieben.
Sie können eine Präprozessor-Magie ausprobieren, um ein begrenztes Handle für Typnamen zu erhalten, aber das ist alles andere als eine allgemeine Reflexion (und streng genommen außerhalb der C-Sprache).
Das Prinzip, das Sie in
Typnamen sind nicht Laufzeitkonzepte; und darüber hinaus macht die statische Typisierung eine solche Konstruktion unmöglich.
Hier ist einer der wenigen Präprozessor-Gimmicks, die ich mir vorstellen kann:
%Vor%Sehen Sie sich die Metaresc-Bibliothek Ссылка
anEs bietet eine Schnittstelle für die Typdeklaration, die auch Metadaten für den Typ generiert. Basierend auf Metadaten können Objekte beliebiger Komplexität einfach serialisiert / deserialisiert werden. Out-of-the-Box können Sie XML, JSON, XDR, Lisp-ähnliche Notation, C-Init-Notation serialisieren / deserialisieren.
Hier ist ein einfaches Beispiel:
%Vor%Dieses Programm gibt
aus %Vor%Bibliothek funktioniert gut für die neuesten gcc und kling.
Tags und Links c reflection struct