Ich habe diesen Makrocode, mit dem ich sowohl eine C Enumeration als auch eine Liste der enumerierten Namen als Strings unter Verwendung eines Konstrukts definieren kann. Es hindert mich daran, Aufzählernamen zu duplizieren (und möglicherweise Fehler für große Listen einzuführen).
%Vor%dann:
%Vor%sollte bei der Erweiterung Folgendes erzeugen:
%Vor%In der Implementierungsdatei habe ich diesen Code:
%Vor%, das bei der Erweiterung erzeugt:
%Vor%Ich würde gerne wissen, wie viele Aufzählungselemente ich auf diese Weise erstellt habe und sie an Arrays zur Kompilierung weitergeben kann. Im obigen Beispiel würde dies bestimmen, dass TOTAL_ITEMS = N zur Kompilierzeit ist. Ist es möglich, Makroaufrufe auf diese Weise zu zählen?
Ich habe ein nicht standardmäßiges Makro COUNTER erwähnt, ähnlich wie die Makros FILE und LINE , aber ich hoffe Es gibt einen Standardweg.
Wäre auch daran interessiert zu hören, ob es einen besseren Weg gibt, dies zu erreichen, ohne Makros zu benutzen.
Folgendes sollte funktionieren:
%Vor%Bearbeiten : Danke an Raymond Chen, dass wir uns keine Sorgen um das unnötige letzte Komma in der Liste machen müssen. (Ich hatte das Problem für Enums mit strikten C89-Compilern falsch verstanden, wie in Ist das letzte Komma in C enum erforderlich? . )
Sie können dieselbe Methode verwenden, um die Aufrufe zu zählen.
%Vor%Wäre auch daran interessiert zu hören, ob es einen besseren Weg gibt, dies zu erreichen, ohne Makros zu benutzen.
Sie können immer eine Skriptsprache wie Ruby oder Python verwenden, um .c und .h Dateien für Sie zu generieren. Wenn Sie es gut machen, können Sie Ihr Skript in Ihr Makefile integrieren.
Siehe die Vorschläge von Mu Dynamics "Enums, Strings und Faulheit" ; Diese beziehen sich zumindest auf das, wonach Sie suchen.
Schauen Sie sich andernfalls die Boost-Präprozessor-Sammlung an (die sowohl mit dem C-Präprozessor als auch mit dem C ++ - Präprozessor verwendet werden kann). .
Tags und Links macros c c-preprocessor