Что означает обратная косая черта после открытия кронштейна?

В объявлении макроса, например:

#define WAIT_SPI2_TRANSMISSON_END() {while ((SPI2_SR & SPI_SR_TXCTR_MASK) != 0) {\
                                     if( SPI2_SR & SPI_SR_RFDF_MASK ) {\
                                       (void)SPI2_POPR;\
                                       SPI2_SR |= SPI_SR_RFDF_MASK ;\
                                     }}\

Что означают эти обратные косые черты (\)?

Ответ 1

Это символ продолжения строки.

После него не должно быть ничего другого (кроме символа конца строки), включая пробел.

Это особенно полезно для макросов, поскольку оно добавляет ясности.

(Очень, очень редко - особенно в старом кодексе - вместо \ вы увидите последовательность ??/ триграфа. В эти дни, хотя это скорее вопрос опроса интервьюеров.)

Ответ 2

Косые черты используются для того, чтобы сделать следующий конец строки не-linebreak для препроцессора. A #define должна быть ровно одной строкой для препроцессора. Чтобы увеличить читаемость, вы можете использовать обратную косую черту перед концом строк. Препроцессор сначала удалит любые прерывания строк, которым предшествует обратная косая черта, и только после этого проанализируйте #define. Поэтому, когда вы видите несколько строк, PP видит только один.

Ответ 3

Это так называемая непрерывная линия. Это означает, что ваша линия продолжена в следующей строке. Иногда бывает проще читать вещи, если они написаны таким образом.

BTW - продолженные строки "склеиваются" на проходе препроцессора.

Читайте здесь о шаге # 3: gcc docs

Выдержки:

 /\
 *
 */ # /*
 */ defi\
 ne FO\
 O 10\
 20

эквивалентно:

#define FOO 1020

Следует отметить, что продолженные строки не должны использоваться в макросах препроцессора. Это совершенно законный верх, пишите это:

f\
lo\
at f = 5.0; 

что совпадает с:

float f = 5.0;

Ответ 4

Это означает, что оператор define переместится более чем на одну строку.