Kraft Leer in C Makro?
-
11-09-2019 - |
Frage
Ich habe das folgende Makro eine neue Funktion nach einem speziellen Namensschema zu definieren:
#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }
Allerdings verkettet der Präprozessor immer void
und ##func_STUB
aber ich will es offenbar die Leerzeichen in dieser Position erhalten.
Ich weiß, dass ich konnte nur eine Schnur prepend ##func_STUB
, aber das ist nicht das, was ich will.
Wie würde ich dieses Problem lösen?
Lösung
Ich denke, was Sie wirklich wollen, ist näher an:
#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }
Aber Sie sollten diese beantworten verknüpft auch einen Blick auf SO, die einige zusätzliche Details über das hat Verhalten des token einfügen Operator:
Eine Sache bewusst zu sein, wenn Sie die Token-Paste verwenden ( ‚##‘) oder Zeichenfolge ( ‚#‘) Vorverarbeitung Betreiber ist, dass Sie eine zusätzliche Dereferenzierungsebene verwenden müssen für sie richtig zu arbeiten in alle Fälle.
Wenn Sie dies nicht tun und die Elemente auf dem Token-Einfügen Operator sind Makros selbst übergeben, werden Sie Ergebnisse, die wahrscheinlich nicht, was Sie wollen ...