Forza Whitespace in C Macro?
-
11-09-2019 - |
Domanda
Ho la seguente macro per definire una nuova funzione seguendo uno schema di denominazione speciale:
#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }
Tuttavia, il preprocessore concatena sempre void
e ##func_STUB
ma io, ovviamente, vogliono sapere di preservare gli spazi in quella posizione.
Lo so che ho potuto solo anteporre qualche stringa di ##func_STUB
, ma questo non è quello che voglio.
Come faccio a risolvere questo problema?
Soluzione
Credo che ciò che si vuole veramente è più vicina a:
#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }
Ma si dovrebbe anche guardare questo legato SO rispondere che ha alcuni dettagli aggiuntivi sulla comportamento dell'operatore incollare token:
Una cosa da tenere presente quando si utilizza il token-incolla ( '##') o stringizing ( '#') pre-elaborazione operatori è che si deve utilizzare un ulteriore livello di indirezione per loro di lavorare correttamente tutti i casi.
Se non si esegue questa operazione e gli elementi passati al gestore token-incolla sei macro se stessi, si otterrà i risultati che sono probabilmente non ciò che si vuole ...