C строка добавить - PullRequest
       7

C строка добавить

3 голосов
/ 12 мая 2011

У меня есть две строки C, которые я хочу добавить, и результат должен быть назначен переменной lhs.Я видел статический код инициализации, например:

char* out = "May God" "Bless You";.

На выходе было действительно "May GodBless You".Я понимаю, что этот результат может быть результатом некоторого неопределенного поведения.

Код фактически работал и никогда не давал неверных результатов.И не было, чтобы у нас были такие заявления только в одном месте.Это можно было увидеть в нескольких местах очень стабильного кода и использовалось для формирования запросов SQL.

Допускает ли стандарт C такую ​​конкатенацию?

Ответы [ 3 ]

6 голосов
/ 12 мая 2011

Да, это гарантировано.

Извлечение из http://en.wikipedia.org/wiki/C_syntax#String_literal_concatenation:

Литералы соседних строк объединяются во время компиляции;это позволяет разбивать длинные строки на несколько строк, а также позволяет строковым литералам, полученным из определений препроцессора C, и макросам, добавляемым в строки во время компиляции

4 голосов
/ 12 мая 2011

Да. эта конкатенация разрешена в C, это не неопределенное поведение.

Хотя я думаю, что это должно привести к "Да благословит вас Бог" (поскольку в цитируемой части нет места)

2 голосов
/ 12 мая 2011

Стандарт говорит

5.1.1.2 Этапы перевода

6. Литеральные токены смежных строк объединяются.

Итак, компилятор Solaris делал все правильно.

...