Я искал этот код, но мне не удалось выяснить, почему использование «\» после & & оператора?Использование "" в C?
if ((*(u32*)(kaddr + 0x64) == *(u32*)(kaddr + 0x78)) && \
(*(u32*)(kaddr + 0x68) == *(u32*)(kaddr + 0x88)))
Я искал этот код, но мне не удалось выяснить, почему использование «\» после & & оператора?Использование "" в C?
if ((*(u32*)(kaddr + 0x64) == *(u32*)(kaddr + 0x78)) && \
(*(u32*)(kaddr + 0x68) == *(u32*)(kaddr + 0x88)))
\
прямо перед концом линии склеивает следующую линию к току. Поскольку C обычно игнорирует пробелы, это в основном полезно при объявлении макросов.
обратной косой не требуется, если это не является частью #define
.
Из спецификации C §5.1.1.2
Каждый экземпляр обратной косой черты (
\
) сразу же с последующим новой строки в удалении сплайсинга линии физических источников для формирования логических исходных линий.
Но это не обязательно, поскольку язык C не требует, чтобы оператор if
размещался на одной строке.
Среди его применений - определения макросов, в основном это говорит компилятору не останавливаться в конце строки, но rater для продолжения. Пример:
#define ASSERT_NULL(value) \
do { \
if((value) == NULL) { \
return true; \
} \
} while(NULL)
Теперь, если вы не будете ставить \
, вы не получите функциональность, которую вы ищете.
«Утверждать» означает пассивно требовать, чтобы что-то было истинным. Если 'value' удовлетворяет требованию, чтобы он был« NULL », этот макрос заставляет функцию возвращаться. Это немного странно. – Potatoswatter