59 votes

Directives DEFINE multi-lignes ?

Je ne suis pas un expert, alors allez-y doucement avec moi. Y a-t-il des différences entre ces deux segments de code ?

#define BIT3 (0x1
<
<
3)
static int a;

et

#define BIT3 (0x1 << 3) static int a;

Par ailleurs, existe-t-il un moyen d'écrire le premier en une seule ligne ? Quel est l'intérêt de ce style à plusieurs lignes ? Le code suivant est-il bon ?

#define BIT3 (0x1 << 3)
static int a;

105voto

Oli Charlesworth Points 148744

Une macro multi-lignes est utile si vous avez une macro très complexe qui serait difficile à lire si elle était sur une seule ligne (bien qu'il soit déconseillé d'avoir des macros très complexes).

En général, vous pouvez écrire une définition sur plusieurs lignes en utilisant le caractère de continuation de ligne, \ . Ainsi, par exemple

#define MY_MACRO    printf( \
    "I like %d types of cheese\n", \
    5 \
    )

Mais vous ne pouvez pas le faire avec votre premier exemple. Vous ne pouvez pas diviser les jetons comme cela ; le << L'opérateur left-shift doit toujours être écrit sans espace de séparation, sinon il serait interprété comme deux opérateurs less-than. Donc peut-être :

#define BIT3 (0x1 \
    << \
    3) \
    static int a;

ce qui est maintenant équivalent à votre deuxième exemple.

(Bien que je ne sois pas sûr de l'utilité de cette macro).

20voto

phoxis Points 14005

Par exemple :

#define fact(f,n)   for (f=1; (n); (n)--) \
                      f*=n;

Vous pouvez séparer les lignes avec le \ caractère. Notez qu'il n'est pas spécifique à une macro. Vous pouvez ajouter le \ dans votre code chaque fois que vous souhaitez rompre une longue ligne.

7voto

Prof. Falken Points 10242

Le premier ne devrait pas fonctionner. Les lignes doivent être séparées par une barre oblique inverse, puis par une nouvelle ligne. Comme ceci :

#define SOME_MACRO "whatever" \
"more" \
"yet more"

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