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).