2015-08-15 2 views
0

Я искал этот код, но мне не удалось выяснить, почему использование «\» после & & оператора?Использование "" в C?

if ((*(u32*)(kaddr + 0x64) == *(u32*)(kaddr + 0x78)) && \ 
    (*(u32*)(kaddr + 0x68) == *(u32*)(kaddr + 0x88))) 

ответ

3

\ прямо перед концом линии склеивает следующую линию к току. Поскольку C обычно игнорирует пробелы, это в основном полезно при объявлении макросов.

4

обратной косой не требуется, если это не является частью #define.

Из спецификации C §5.1.1.2

Каждый экземпляр обратной косой черты (\) сразу же с последующим новой строки в удалении сплайсинга линии физических источников для формирования логических исходных линий.

Но это не обязательно, поскольку язык C не требует, чтобы оператор if размещался на одной строке.

1

Среди его применений - определения макросов, в основном это говорит компилятору не останавливаться в конце строки, но rater для продолжения. Пример:

#define ASSERT_NULL(value)  \ 
    do {      \ 
     if((value) == NULL) { \ 
      return true;  \ 
     }      \ 
    } while(NULL) 

Теперь, если вы не будете ставить \, вы не получите функциональность, которую вы ищете.

+0

«Утверждать» означает пассивно требовать, чтобы что-то было истинным. Если 'value' удовлетворяет требованию, чтобы он был« NULL », этот макрос заставляет функцию возвращаться. Это немного странно. – Potatoswatter

 Смежные вопросы

  • Нет связанных вопросов^_^