Смежные символьные и строковые литералы

Это известный факт, что в C вы можете написать "a" "b" и получить "ab". Это обсуждается в стандарте C11:

На этапе трансляции 6 последовательности многобайтовых символов, заданные любой последовательностью смежных символов и токенов строковых литералов с идентичными префиксами, объединяются в одну последовательность многобайтовых символов.

Фраза "символ и...", казалось бы, предполагает, что вы можете получить те же результаты, написав 'a' "b", но я никогда не сталкивался с таким использованием, и GCC, и компилятор Microsoft отвергают его. Я что-то пропустил?


person rwallace    schedule 05.06.2015    source источник
comment
Я думаю, что это следует читать литералом строки символов, а не литералом символов.   -  person Alex Shesterov    schedule 05.06.2015
comment
Полный параграф: В фазе преобразования 6 последовательности многобайтовых символов, заданные любой последовательностью смежных символов и токенов строковых литералов с одинаковым префиксом, объединяются в одну последовательность многобайтовых символов. Если какой-либо из токенов имеет префикс кодировки, результирующая многобайтовая последовательность символов рассматривается как имеющая такой же префикс; в противном случае он обрабатывается как литерал строки символов. Возможность конкатенации токенов широких строковых литералов с разными префиксами и, если да, то обработка полученной многобайтовой последовательности символов определяется реализацией. и..   -  person P.P    schedule 05.06.2015
comment
И это также в разделе 6.4.5 Строковые литералы. Таким образом, довольно очевидно, что стандарт относится к литералам символьных строк, а не к символьным литералам.   -  person P.P    schedule 05.06.2015
comment
Я считаю, что его следует интерпретировать как любую последовательность смежных токенов символьных строковых литералов и строковых литералов с одинаковым префиксом. Это очень запутанное сокращение.   -  person molbdnilo    schedule 05.06.2015


Ответы (1)


Нет, может быть, мы неправильно поняли сделанное там утверждение.

Позвольте мне процитировать из C11, глава §5.1.1.2, Этапы перевода, параграф 6,

  1. Смежные токены строкового литерала объединяются.

Здесь нет никакой путаницы между char и строковыми литералами, ясно сказано только о строковых литералах.

person Sourav Ghosh    schedule 05.06.2015