LINUX.ORG.RU

HEREDOC синтаксис в C и C++

 , , ,


0

1

Что-то гоголь с яшей молчат как партизаны о HEREDOC синтаксисе в C и C++.

Единственное, что нашел - упоминание о стандарте C++11:

http://rosettacode.org/wiki/Here_document#C.2B.2B

Но в моем случае с Qt 5.3.2 и GCC 4.8.3 это решение не работает.

Вопрос: как сделать HEREDOC строку в C++? Мне нужно засунуть кусок HTML-кода с кучей кавычек в строку QString.

★★★★★

Ты про это, что ли?

#include <stdio.h>

char str[] = "a long string\n\
with\n\
new lines\n\
and \"quotes\"";

int
main()
{
        puts(str);
        return 0;
}
beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

Вопрос: как сделать HEREDOC строку в C++? Мне нужно засунуть кусок HTML-кода с кучей кавычек в строку QString.

Ответ: обычным файлом.

Ответ2: в сети есть программы, которые переделывают данные в C/C++. Но я видел только для цифр и, внезапно, картинок(XPM).

Ответ3: Что мешает сделать так:

char s[]="la
la
la";
только кавычки надо экранировать.

emulek
()
Последнее исправление: emulek (всего исправлений: 1)

-std=c++11 включал?

anonymous
()

Есть костыльный способ, совместимый с С++98: заменяешь все двойные кавычки в своем документе на одинарные, втыкаешь строковым литералом без экранирований, после создания QString заменяешь все одинарные кавычки на двойные. Естественно, не решается проблема со слэшами (если они там есть), естественно, теряются одинарные кавычки, но с простыми вещами вроде JSON метод работает на ура.

Кончено, если есть возможность (например, это не юнит-тест, где принципиальна наглядность), лучше использовать отдельный файл (или кутишный ресурс)

annulen ★★★★★
()
Ответ на: комментарий от beastie

(в конце необходим «\»).

точнее \n\ да, каюсь, забыл.

emulek
()

Но в моем случае с Qt 5.3.2 и GCC 4.8.3 это решение не работает.

Обманывать нехорошо.

~$ cat test.cpp
const char* s = R"(1
2
3)";
~$ g++-4.8 -std=c++11 -c test.cpp
~$ 
anonymous
()
Ответ на: комментарий от anonymous

он не обманывает, он не умеет

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.