glibc допускает три -десятичных диапазона с точками (как в POSIX )и два -шестнадцатеричных диапазона с точками. Это нигде не задокументировано, но мы можем видеть это в исходном коде. Это не определенное переносимое поведение, а расширение glibc и, возможно, других. Если вы пишете свои собственные файлы, используйте decimal.
Давайте подтвердим, что это реальное поведение glibc.
При обработке диапазона glibc использует:
if (decimal_ellipsis)
while (isdigit (*cp) && cp >= from)
--cp;
else
while (isxdigit (*cp) && cp >= from)
{
if (!isdigit (*cp) && !isupper (*cp))
lr_error (lr, _("\
hexadecimal range format should use only capital characters"));
--cp;
}
, где isxdigit
проверяет шестнадцатеричное число, а isdigit
десятичное. Позже он таким же образом разветвляет преобразование потребляемой подстроки в целое число и продолжает, как и следовало ожидать. Ранее он определял тип рассматриваемого многоточия во время синтаксического анализа , полученного из лексера .
Charmap-файл UTF -8 создается механически из файла unicode.org UnicodeData.txt
, создавая 64 -диапазона кодовых точек с двумя точками. Я предполагаю, что это удобное авто-поколение хотя бы частично отстает от расширения, но я не знаю. Более ранние версии glibc также генерировали его, но с использованием другой программы и того же формата.
Опять же, похоже, это нигде не задокументировано, и, поскольку он автоматически -генерируется рядом с местом его использования, он, вероятно, может измениться, но я полагаю, что он будет стабильным.
Если дано что-то вроде
.. /xe3/x90/x80
, то это шестнадцатеричный диапазон, поскольку он использует две точки. С тремя точками это будет десятичный диапазон POSIX.
Если вы работаете в другой системе, в которой нет этого расширения, это будет просто синтаксическая ошибка. Переносимый файл карты символов должен использовать только десятичные диапазоны.