Question

J'ai la macro suivante pour définir une nouvelle fonction qui suit un schéma de nommage spéciale:

#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }

Cependant, le préprocesseur concaténer toujours void et ##func_STUB mais je veux évidemment à préserver les espaces blancs à cette position.

Je sais que je pouvais préfixer une chaîne à ##func_STUB, mais ce n'est pas ce que je veux. Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

Je pense que ce que vous voulez vraiment est plus proche de:

#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }

Mais vous devez aussi regarder ce lien répondre SO qui a quelques détails supplémentaires sur la le comportement de l'opérateur de collage de jeton:

  

Une chose à prendre en compte lorsque vous utilisez la pâte de jeton ( « de ## ») ou stringizing ( « # ») opérateurs prétraiter est que vous devez utiliser un niveau supplémentaire d'indirection pour eux de travailler correctement tous les cas.

     

Si vous ne le faites pas et les éléments transmis à l'opérateur-coller de jeton sont eux-mêmes des macros, vous obtiendrez des résultats qui ne sont probablement pas ce que vous voulez ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top