Многострочный макрос полезен, если у вас очень сложный макрос, который было бы трудно прочитать, если бы он был все в одной строке (хотя нежелательно иметь очень сложные макросы).
В общем,Вы можете написать многострочное определение, используя символ продолжения строки, \
.Например,
#define MY_MACRO printf( \
"I like %d types of cheese\n", \
5 \
)
Но вы не можете сделать это с вашим первым примером.Вы не можете разделить токены таким образом;оператор <<
влево должен всегда записываться без разделяющего пробела, иначе он будет интерпретирован как два оператора меньше.Так что, может быть:
#define BIT3 (0x1 \
<< \
3) \
static int a;
, что теперь эквивалентно вашему второму примеру.
[Хотя я не уверен, что этот макрос когда-нибудь будет полезен!]