Je dois utiliser des parenthèses dans mes paramètres réels pour une macro, mais les parenthèses semblent changer le comportement de la virgule séparant les paramètres de la macro.Comment puis-je utiliser des parenthèses dans les paramètres de la macro C++?
J'ai demandé à mon préprocesseur d'exporter sa sortie dans un fichier texte, afin que je puisse voir ce qu'il produisait.
Puis j'ai effectué un test de base pour confirmer le comportement.
#define MACRO_TEST_1(X , Y) X && Y
MACRO_TEST_1 (A , B)
// Desired result: A && B
// Actual result: A && B
MACRO_TEST_1 ((C , D))
// Desired result: (C && D)
// Actual result: (C , D) &&
// Warning: "not enough actual parameters for macro 'MACRO_TEST_1'"
Il apparaît que l'addition d'une ouverture parenthese au premier paramètre, et une parenthèse fermante pour le second paramètre, provoque le préprocesseur pour traiter la virgule comme partie du premier paramètre, et suppose donc que I n'a pas fourni un deuxième paramètre du tout.
Ceci est mis en évidence par l'avertissement, ainsi que la sortie du préprocesseur ne montrant rien après le &&
. Donc, ma question est, comment puis-je dire au préprocesseur que la virgule sépare les paramètres, même si les paramètres ont des parenthèses en eux?
J'ai essayé d'échapper les parenthèses ou la virgule, mais cela n'a fait aucune différence.
(Mêmes résultats, juste avec le caractère d'échappement inséré dans la sortie de préprocesseur.)
Avez-vous vraiment besoin de faire cela avec des macros? Pourquoi? –
@FrankPuffer Je n'entrerai pas dans les détails. C'est une situation étrange, en travaillant avec l'ancien code - probablement temporaire.Je me dis qu'il y a probablement un truc moins connu que je devrais utiliser pour obtenir des parenthèses, et c'est ce dont j'ai besoin pour le moment. – Giffyguy
@FrankPuffer Les fonctions n'auraient-elles pas le même problème? 'func (1, 2)' est 2 arguments, 'func ((1, 2))' est juste un argument. – Barmar