Ich bin ein wenig in Bezug auf die Bedeutung dieser C Präprozessoranweisung verloren,

StackOverflow https://stackoverflow.com/questions/4478904

  •  11-10-2019
  •  | 
  •  

Frage

Also, für den Anfang, hier ist der Code, mit tatsächlichen Namen für generisch diejenigen zu begrenzen Verwirrung geschaltet.

/* Get the list of Hotkey commands */
#define A_COMMANDS_MACRO(a, b, c, d) a = b ,
enum {
#include "commandsFile.def"
} ;
#undef  A_COMMANDS_MACRO

Dies ist ein Ausschnitt aus einem gewissen Quellcode Ich habe mich über und unter Berücksichtigung als eine Möglichkeit, Forking mich vertraut zu machen mit den Feinheiten des C Programmiersprache. Also, mein ungeübtes Auge, scheint dies nichts zu tun. Zu meinem Gehirn, die Definition etwas und dann sofort undefining würde es scheinen, sich gegenseitig aufzuheben.

Natürlich, ich weiß, dass ich falsch bin. Aber warum bin ich falsch?

War es hilfreich?

Lösung

Was Sie sehen, dass es in der Regel X-Makro aufgerufen wird. Die Technik besteht Makros über #define bei der Definition, und dann mit einer Datei, die Marken von ihnen mit #include verwenden.

Als einfaches Beispiel, könnten Sie einen Header haben (sagen wir myheader.h ), die zwei Funktionen in Form deklariert:

int foo(MYTYPE a, MYTYPE_PTR b);
void bar(MYTYPE a, MYTYPE_PTR b);

Und dann, in Ihrem Code:

#define MYTYPE int
#define MYTYPE_PTR int*
#include "myheader.h"
#undef MYTYPE
#undef MYTYPE_PTR

Die #undefs sind manchmal in der Datei enthalten auch.

Weitere Informationen finden Sie aktuelle an diesen Empfehlungen .

Andere Tipps

Die "commandsFile.def" Datei wahrscheinlich verwendet die "A_COMMANDS_MACRO" Makro irgendwo intern.

Beachten Sie, dass „# include“ im Wesentlichen fügt die Datei enthalten in den darunter ein, so dass die #define immer noch in Kraft ist, wenn „commandsFile.def“ verarbeitet wird.

Die commandsFile.def sollte viele Zeilen enthalten:

A_COMMANDS_MACRO(A_COMMAND, 10, na, na)
A_COMMANDS_MACRO(OTHER_COMMAND, 23, na, na)

Damit der Code würde eine Enumeration mit verfügbaren Befehlen und deren Codes erstellen.

Es könnte nützlich sein, wenn diese DEF-Datei von einem Programm verwendet wird, in einer anderen Sprache geschrieben, so dass anstelle Textanalyse die Implementierung, verwendet es C-Präprozessor, dies zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top