как Backsla sh \ объединяет строки printf при написании отдельных строк в C? - PullRequest
1 голос
/ 16 февраля 2020

Используя 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" );
}

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

Ответы [ 2 ]

4 голосов
/ 16 февраля 2020

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

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

0 голосов
/ 17 февраля 2020

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

#include <stdio.h>

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

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

...