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?

È stato utile?

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 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top