#c #string #c 11
#c #строка #c 11
Вопрос:
Верно, вот кое-что, чего я раньше не видел. Следующий фрагмент кода был найден в исходном виде (хотя я перефразирую, поскольку у меня нет доступа к оригиналу):
char str[] = u8R"delim(SomeTextInHere)delim";
Может ли кто-нибудь на самом деле сказать мне, что это значит и какой эквивалент был бы в C?
Комментарии:
1. Если кто-то написал это в дикой природе, они сумасшедшие.
Ответ №1:
Я не знаю, как перевести это на C, сэр, но это приводит к появлению почти всех новых материалов, связанных с литералами, в одном примере.
u8: utf-8 string literal.
R: Raw string literal (no escape characters)
"delim(" ... ")delim": The prefix and suffix of the raw string literals.
They are used as delimiters, and you can write your own.
Комментарии:
1. Моего отца звали «сэр», вы можете просто называть меня пакс 🙂
Ответ №2:
Эквивалента в C пока нет. Это функция C 11, которая сочетает в себе две вещи.
u8
Префикс означает, что строка будет закодирована в UTF-8. R
Префикс означает, что это необработанный строковый литерал. Объединение их означает, что исходная строка будет закодирована в формате UTF-8.
Необработанные строки — это способ обойти все экранирования, необходимые для регулярных выражений и так далее. Обычно в регулярном выражении приходится использовать много символов «». Но это escape-символ C / C , поэтому в строковых литералах вместо него нужно использовать «». Необработанные строковые литералы позволяют избежать этого. В необработанных строках нет управляющих символов.
Способ работы необработанного строкового литерала заключается в следующем. За R
префиксом следует "
, как обычно. Но все символы до первого (
символа считаются частью разделителя необработанной строки. Итак, если вы начинаете необработанную строку с R"foo(
, строка будет продолжаться до тех пор, пока анализатор не увидит, )foo"
.
Таким образом, вы можете использовать "
,
и практически любые другие символы, если вы выберете свои разделители. Разделитель тоже может быть пустым, поэтому R"(some stuff)"
эквивалентен "some stuff"
. Он заканчивается, когда он видит )"
.