как обратная косая черта \ объединяет строки printf, когда они написаны на отдельных строках в C?

Используя Dev C ++, я немного повеселился с C и получил следующее:

#include<stdio.h>
main()
{
printf("Hello
      world" );
}

^^^^ здесь я думал, что вывод будет похож на "Hello (with пробелы) World", но ошибки:

C:\Users\ASUS\Documents\Dev C++ Programs\helloWorldDk.c In function 'main':
5   10  C:\Users\ASUS\Documents\Dev C++ Programs\helloWorldDk.c [Warning] missing terminating " character
5   3   C:\Users\ASUS\Documents\Dev C++ Programs\helloWorldDk.c [Error] missing terminating " character
6   8   C:\Users\ASUS\Documents\Dev C++ Programs\helloWorldDk.c [Warning] missing terminating " character
6   1   C:\Users\ASUS\Documents\Dev C++ Programs\helloWorldDk.c [Error] missing terminating " character
6   1   C:\Users\ASUS\Documents\Dev C++ Programs\helloWorldDk.c [Error] 'world' undeclared (first use in this function)
6   1   C:\Users\ASUS\Documents\Dev C++ Programs\helloWorldDk.c [Note] each undeclared identifier is reported only once for each function it appears in
7   1   C:\Users\ASUS\Documents\Dev C++ Programs\helloWorldDk.c [Error] expected ')' before '}' token
7   1   C:\Users\ASUS\Documents\Dev C++ Programs\helloWorldDk.c [Error] expected ';' before '}' token

но когда я добавил \, это сработало:

#include<stdio.h>
main()
{ 
printf("Hello \ 
   World" );
}

Без предупреждений и ошибок. Что это за магия '\'? И, пожалуйста, дайте мне знать, существует ли какое-нибудь другое общество.


person Mehul Arora    schedule 16.02.2020    source источник
comment
В первом фрагменте кода отсутствует последний }, а во втором - ". Пожалуйста, скопируйте свой код в точности так, как он есть для любого вопроса.   -  person Thomas Jager    schedule 16.02.2020
comment
Отвечает ли это на ваш вопрос? Обратная косая черта в исходном файле c   -  person Tarek Dakhran    schedule 16.02.2020
comment
это в основном Hello \\ n World   -  person Jacob    schedule 16.02.2020
comment
@ThomasJager, да пропустил их написать сюда. Отредактировал вопрос.   -  person Mehul Arora    schedule 16.02.2020
comment
@Jacob Спасибо, Джейкоб сегодня узнал новое.   -  person Mehul Arora    schedule 16.02.2020


Ответы (2)


Обратная косая черта имеет много специальных значений, например escape-последовательности для представления специальных символов.

Но особое значение, которое вы нашли, - это значение \, за которым сразу следует перевод строки; что означает «игнорировать меня и новую строку». Для компилятора это решает проблему появления новой строки в середине строки.

person Yunnosch    schedule 16.02.2020

C препроцессор будет сращивать строки, так что можно было бы написать,

#include <stdio.h>

int main(void) {
    printf("Hello\n"
        "World\n");
    return 0;
}

Возможно более приятный синтаксис с длинными строками. Обратите внимание, что максимальная длина по-прежнему принудительно. С теоретической точки зрения препроцессор C - это сам по себе язык, см. обсуждение полноты по Тьюрингу. В качестве практического примера в некоторых случаях очень полезны x-макросы.

person Neil    schedule 16.02.2020