Почему я теряю завершающий "характер"? - PullRequest
0 голосов
/ 22 июня 2019
//example1
#include<stdio.h>

int main()
{
  printf("hello World"
  );

}

//example2
#include<stdio.h>

int main()
{
  printf("hello World
  ");

}

В примере 1 компилятор не показал никакой ошибки, но в примере 2 он показывает ошибку missing terminating " character. Почему?

1 Ответ

7 голосов
/ 22 июня 2019

C строковые литералы не могут содержать литеральные переводы строк. Вот стандарт C18 с выделенной соответствующей частью.

6.4.5 Строковые литералы

Синтаксис

string-literal:
     encoding-prefixopt " s-char-sequenceopt "

s-char-sequence:
  s-char
  s-char-sequence s-char

s-char:
  any member of the source character set except
    the double-quote ", backslash \, or new-line character  <---- HERE
  escape-sequence

Если вы хотите, чтобы ваш строковый литерал содержал перевод строки, вместо этого используйте \n, например, "hello\nworld".

Если вы хотите, чтобы ваш строковый литерал был разбит на несколько строк, используйте несколько строковых литералов:

printf("hello "
       "world");
...