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