Force de C en macro Whitespace?
-
11-09-2019 - |
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?
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 ...