2009-12-01 4 views
0

J'ai la macro suivante pour définir une nouvelle fonction qui suit un schéma de nommage spéciale:Forcez les espaces dans C Macro?

#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 pourrais juste ajouter une chaîne à ##func_STUB, mais ce n'est pas ce que je veux. Comment pourrais-je résoudre ce problème?

Répondre

6

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 this linked SO answer qui a quelques détails supplémentaires sur le comportement de l'opérateur de coller jeton:

Une chose Pour savoir quand vous utilisez les opérateurs de pré-traitement token-paste ('##') ou stringizing ('#'), vous devez utiliser un niveau supplémentaire d'indirection pour qu'ils fonctionnent correctement dans tous les cas.

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

+0

erreur Thanks..dumb :) – newgre