Это, я считаю, педантичный вопрос. Однако, поскольку часто задаваемые вопросы, по-видимому, не запрещают педантизм, я продолжу и спрашиваю, так как я действительно заинтересован в ответе.
Я пытаюсь прочитать и понять (большую часть) стандарт C99 (ISO / IEC 9899: 1999). Мне в основном интересно, строго ли это соответствует коду:
printf("String literal 1 "
"String literal 2.\n");
Или должен быть экранирован перевод строки следующим образом:
printf("String literal 1 "\
"String literal 2.\n");
Соответствующим разделом стандарта представляется раздел 5.1.1.2, в котором описаны этапы перевода. На втором этапе каждый символ "\", за которым следует символ новой строки, удаляется, объединяя строки в одну строку. Затем в фазе 6 смежные строковые литеральные токены объединяются.
Таким образом, чтобы первый пример кода соответствовал, я вижу два варианта: либо строковые литералы, разделенные новой строкой, считаются смежными, либо символы новой строки удаляются на одном из предыдущих этапов перевода.
Так кто-нибудь знает, можно ли считать приведенный выше пример кода строго соответствующим в этом контексте, и если да, то есть ли в стандарте что-то, что делает это абсолютно ясным?