2009-06-03 2 views
4

Как вы это называете?Разделение большой строки

static const string message = "This is a message.\n 
           It continues in the next line" 

Проблема следующая строка не распознается как часть строки ..

Как исправить это? Или это единственное решение для создания массива строк, а затем инициализация массива для хранения каждой строки?

ответ

16

Вложите каждую строку в своем собственном наборе цитат:

static const string message = "This is a message.\n" 
           "It continues in the next line"; 

Компилятор объединить их в одну строку.

+1

Более точно, препроцессор будет. – ephemient

+2

@ephemient: фактически, препроцессор не является тем слоем, который делает это. Вы можете проверить это для себя, сделав небольшое приложение и скомпилировав его с помощью «gcc -E test.c». Это выведет результат препроцессора. Вы обнаружите, что строки все еще разделены. Именно сам компилятор выполняет конкатенацию соседней строковой константы * not * препроцессора. –

+4

@ephemient: на самом деле стандарт C99 имеет примечание в разделе, посвященном препроцессору: «148). Обратите внимание, что смежные строковые литералы не объединены в один строковый литерал (см. Фазы перевода в 5.1.1.2), расширение, которое приводит к двум строковым литералам, является недействительной директивой ». –

9

Вы можете использовать слэш или цитировать каждую строку, таким образом

"This is a message.\n \ 
It continues in the next line" 

или

"This is a message." 
"It continues in the next line" 
+0

Я всегда использовал первую форму, но имел проблемы с вставленным белым пространством от отступов ... т. Е. Если бы это утверждение было отступом с четными четырьмя пробелами, в середине строки было бы четыре дополнительных пробела. Теперь я использую только вторую форму. –

1

В C++, как и в C, строковые litterals разделенных пробелами неявно сцепляются, так

"foo" "bar" 

эквивалентен:

"foobar" 

Так что вы хотите:

static const string message = "This is a message.\n" 
           "It continues in the next line"; 
Смежные вопросы