Macros dans les macros
Est-il possible de mettre une macro dans une macro en c++?
Quelque chose comme:
#define Something\
#ifdef SomethingElse\ //do stuff \
#endif\
J'ai essayé et ça ne fonctionne pas donc je suppose que ça ne fonctionne pas, sauf si il y a une sorte de syntaxe qui peut résoudre ce problème?
source d'informationauteur tweetypi
Vous devez vous connecter pour publier un commentaire.
Non, mais vous pouvez tout simplement refactoriser cela en tirant la
#ifdef
comme le toplevel, et à l'aide de deux#define Something ...
des versions pour le vrai et le faux branches de la#ifdef
.Macros, oui. Les directives de préprocesseur, qui sont ce que vous avez posté, pas de
Vous ne pouvez pas utiliser les directives de préprocesseur dans les macros, mais si nous voulons vérifier si
SomethingElse
est défini et appeler un autre macro, vous pourriez faire comme ceci(nécessite un c99 préprocesseur et Boost.Préprocesseur de la bibliothèque):Si
SomethingElse
est défini, il fera appelMACRO1
sinon il va appelerMACRO2
. Pour que cela fonctionne,SomethingElse
doit être défini comme ceci:Par la manière, cela ne fonctionne pas dans Visual Studio, en raison d'un bogue dans leur compilateur, il y a une solution ici: http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement
Pas. J'ai répondu à cela dans c++ macros à la mémoire?
Si vous souhaitez vérifier ou modifier le prétraitement de l'environnement, en d'autres mots pour définir un prétraitement sous-routine plutôt qu'une chaîne de caractères de remplacement de la macro, vous devez utiliser un en-tête, bien que les raisons légitimes pour le faire sont peu et loin entre.