Добавление комментария в необработанный строковый литерал

#c

Вопрос:

У меня есть необработанный строковый литерал:

 const char* s1 = R"foo(
Hello
  World
)foo";
 

Я хотел бы добавить комментарий внутри этого строкового литерала, например:

 const char* s1 = R"foo(
Hello
// Say hello to the whole world because we don't know who will run the program.
  World
)foo";
 

Этот комментарий фактически используется как часть строки. Есть ли какой-либо способ избежать этого комментария, который будет проанализирован как фактический комментарий (или это противоречит цели необработанной строки)?

Очевидно, я могу делать уродливые вещи, например, разделять строку надвое, добавлять комментарий между двумя частями и объединять их, но я ищу что-то более элегантное.

Комментарии:

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

2. Поместите комментарий до , после строки или разделите строку.

Ответ №1:

Я думаю, что самое близкое — это «избежать этого» с помощью разделителей конца и начала необработанной строки:

 const char* s1 = R"foo(
Hello)foo"
// Say hello to the whole world because we don't know who will run the program.
R"foo(
  World
)foo";
 

Комментарии:

1. Это теряет новую грань между приветом и миром. Вам нужно будет добавить его (и это одна из причин, по которой я счел это решение нежелательным, поскольку оно вводит небольшие труднодоступные ошибки, подобные этому).

2. @Jarod42 и Бенджикесслер. Спасибо, что указали на это. Я изменил ответ, чтобы имитировать точную строку. Вывод по-прежнему заключается в том, что я думаю, что это наименее плохой ответ с учетом ограничений грамматики C .

3. @BenjyKessler: Я бы сказал, что это разбиение необработанной строки, которое n может быть легко опущено, с "n" "Hellon" /* some comment */ " Worldn" eol более явно.