97 votes

Macros préprocesseur multi-lignes

Comment faire une macro préprocesseur multi-lignes ? Je sais comment faire une ligne :

#define sqr(X) (X*X)

mais j'ai besoin de quelque chose comme ça :

#define someMacro(X)
    class X : public otherClass
    {
         int foo;
         void doFoo();
    };

Comment faire pour que ça marche ?

Il ne s'agit que d'un exemple, la macro réelle peut être très longue.

0 votes

Vous pouvez facilement obtenir la réponse en faisant une recherche sur l'OS. Par exemple stackoverflow.com/questions/4007865/

0 votes

Différentes méthodes sont ici : parashift.com/c++-faq/macros-avec-multi-stmts.html

0 votes

1voto

Uday Points 437

Nous sommes en 2021 et nous devrions vraiment nous diriger vers inline . L'utilisation incorrecte, inutile et excessive de macros alourdit le code et est difficile à déboguer (lire vraiment difficile à déboguer).

inline void foo(x)
{
   // do whatever with x
}

si, toutefois, les macros sont vraiment nécessaires, les entourer d'une do { } while(0); La raison est expliquée dans ce post Pourquoi utiliser des instructions do-while et if-else apparemment sans signification dans les macros ?

0voto

On peut écrire une macro multi-lignes comme une fonction, mais chaque déclaration se termine par “\” . Voyons avec un exemple. Voici une macro simple, qui accepte un nombre d'entrée de l'utilisateur, et imprime si le nombre entré est pair ou impair.

#include <stdio.h>

#define MACRO(num, str) ({\
            printf("%d", num);\
            printf(" is");\
            printf(" %s number", str);\
            printf("\n");\
           })

int main(void)
{
    int num;

    printf("Enter a number: ");
    scanf("%d", &num);

    if (num & 1)
        MACRO(num, "Odd");
    else
        MACRO(num, "Even");

    return 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X