Подтвердить что ты не робот

Возможные значения для __STDC_ISO_10646__

Каковы возможные значения макроса __STDC_ISO_10646__? Wikipedia имеет список версий стандарта ISO 10646, соответствующий различным версиям Unicode, но только год, а не месяц, а макрос содержит значение месяца.

Изменить: Так как несколько человек полностью не понимают актуальный вопрос. Я прошу указать конкретный список чисел, который этот макрос может принять за его значение, и соответствующие выпуски ISO 10646 для каждого номера.

4b9b3361

Ответ 1

Взгляд на отчеты ISO/IEC JTC1/SC2 (кодированные наборы символов)/WG2 (универсальный кодированный набор символов), которые доступны в http://std.dkuug.dk/JTC1/SC2/WG2/docs/projects и перекрестная проверка с помощью http://babelstone.blogspot.com.es/2007/06/unicode-and-isoiec-10646.html, можно скомпилировать предварительный список дат публикации. Некоторые даты могут быть отключены, в частности те, у которых только месяц и год (и не день) были целевыми датами.

  • 1993-05-01 ISO/IEC 10646-1:1993
  • 1996-03-01 ISO/IEC 10646-1:1993 TC1
  • 1996-10-15 ISO/IEC 10646-1:1993 Amd.1 (UTF-16)
  • 1996-10-15 ISO/IEC 10646-1:1993 Amd.2 (UTF-8)
  • 1996-10-15 ISO/IEC 10646-1:1993 Amd.3 (Позиции кода для управляющих символов: C0, C1)
  • 1996-10-15 ISO/IEC 10646-1:1993 Amd.4 (Удаление UTF-1)
  • 1997-11-15 ISO/IEC 10646-1:1993 Amd.6 (тибетский)
  • 1997-11-15 ISO/IEC 10646-1:1993 Amd.7 (33 дополнительных символа)
  • 1997-12-15 ISO/IEC 10646-1:1993 Amd.8 (Новое приложение для идеологов CJK)
  • 1997-12-15 ISO/IEC 10646-1:1993 Amd.9 (Идентификаторы символов)
  • 1998-05-15 ISO/IEC 10646-1:1993 Amd.5 (хангульские слоги)
  • 1998-07-15 ISO/IEC 10646-1:1993 TC2
  • 1998-07-15 ISO/IEC 10646-1:1993 Amd.11 (Унифицированные канадские слоги аборигенов)
  • 1998-09 ISO/IEC 10646-1:1993 TC3
  • 1998-09-01 ISO/IEC 10646-1:1993 Amd.12 (Cherokee)
  • 1998-10-01 ISO/IEC 10646-1:1993 Amd.10 (эфиопский)
  • 1998-10-15 ISO/IEC 10646-1:1993 Amd.13 (унифицированные идеограммы CJK)
  • 1998-11-01 ISO/IEC 10646-1:1993 Amd.16 (модели Брайля)
  • 1998-11-01 ISO/IEC 10646-1:1993 Amd.19 (Runic)
  • 1998-11-01 ISO/IEC 10646-1:1993 Amd.20 (Ogham)
  • 1999-05-15 ISO/IEC 10646-1:1993 Amd.23 (Bopomofo Extended и другие символы)
  • 1999-06-01 ISO/IEC 10646-1:1993 Amd.21 (Sinhala)
  • 1999-07-15 ISO/IEC 10646-1:1993 Amd.17 (Расширение унифицированных идеографий CJK)
  • 1999-07-15 ISO/IEC 10646-1:1993 Amd.18 (Символы и другие символы).
  • 1999-10 ISO/IEC 10646-1:1993 Amd.14 (Yi-слоги и Yi-радикалы).
  • 1999-10 ISO/IEC 10646-1:1993 Amd.22 (символы клавиатуры)
  • 1999-10 ISO/IEC 10646-1:1993 Amd.25 (кхмерский)
  • 1999-10 ISO/IEC 10646-1:1993 Amd.26 (бирманский [Мьянма])
  • 1999-10 ISO/IEC 10646-1:1993 Amd.27 (сирийский)
  • 1999-11 ISO/IEC 10646-1:1993 Amd.24 (Thaana)
  • 2000-02 ISO/IEC 10646-1:1993 Amd.15 (Радикалы [Kang Xi и CJK дополнение] и цифры)
  • 2000-02 ISO/IEC 10646-1:1993 Amd.28 (Идеографические описания)
  • 2000-02 (опубликовано в 1999 году?) ISO/IEC 10646-1:1993 Amd.29 (монгольский)
  • 2000-02 (опубликовано в 1999 году?) ISO/IEC 10646-1:1993 Amd.30 (Дополнительные латыни и другие символы).
  • 2000-03 (опубликован в 1999 году?) ISO/IEC 10646-1:1993 Amd.31 (тибетское расширение)
  • 2000-09-15 ISO/IEC 10646-1: 2000, 2-е издание (часть 1: архитектура и базовая многоязычная плоскость).
  • 2001-11-01 ISO/IEC 10646-2: 2001 (часть 2: дополнительные самолеты).
  • 2002-07-15 ISO/IEC 10646-1: 2000 Amd.1 (Математические символы и другие символы)
  • 2003-02 (не публикуется отдельно?) ISO/IEC 10646-1: 2000 Amd.2 (Limbu, Tai Le, Yijing и другие символы).
  • 2003-02 (не публикуется отдельно?) ISO/IEC 10646-2: 2001 Amd.1 (Эгейский, Угаритский и другие символы).
  • 2003-12-15 ISO/IEC 10646: 2003, 3rd Edition
  • 2005-11-15 ISO/IEC 10646: 2003 Amd.1 (глаголический, коптский, грузинский и другие персонажи).
  • 2006-07-15ISO/IEC 10646: 2003 Amd.2 (N'Ko, Phags-pa, финикийский и другие символы).
  • 2008-02-15 ISO/IEC 10646: 2003 Amd.3 (Лепча, Оли Чики, Саураштра, Вай и другие персонажи).
  • 2008-07-01 ISO/IEC 10646: 2003 Amd.4 (Lanna, Cham, игровые плитки и другие персонажи).
  • 2008-12-01 ISO/IEC 10646: 2003 Amd.5 (Тай Тхам, Тай Вьет, Авестан, египетские иероглифы, Объединенные идеограммы CJK Расширение C и другие персонажи).
  • 2009-10 <? > ИСО/МЭК 10646: 2003 Amd.6 (Бамум, Яванский, Лису, Мейек, Самаритян и другие персонажи).
  • 2009-11???? (опубликовано в 2010 году?) ISO/IEC 10646: 2003 Amd.7 (Мандайский, Батак, Брахми и другие персонажи).
  • (не публикуется отдельно, включен в 2-е издание). ISO/IEC 10646: 2003 Amd.8 (Дополнительные символы, дополнение Bamum, расширение унифицированных идеологов CJK D и другие символы).
  • 2011-03-15 ISO/IEC 10646: 2011, 2nd Edition (сломанные CJK-B диаграммы из-за проблем с шрифтом)
  • 2012-06-01 ISO/IEC 10646: 2012, 3rd Edition
  • 2013-04-15 ISO/IEC 10646: 2012 Amd.1 (Линейный A, Пальмировый, Старый Северный Аравийский, Синдхи, Mro, Bassa Vah и другие персонажи).
  • (ожидается публикация в качестве части 4-го издания) ISO/IEC 10646: 2012 Amd.2 (Кавказский албанский, Псалтырь Пехлеви, Старый Венгерский, Махаджани, Грантха, Моди, Пахау, Хмонг, Менде, и другие символы)
  • (еще не опубликован) ISO/IEC 10646: 2014, 4-е издание.
  • 2014? ISO/IEC 10646: 2014 Amd.1 (дополнение к Cherokee и другие символы).
  • 2015? ISO/IEC 10646: 2014 Amd.2 (марченские, нушу, идеограммы Тангута, площадь Занабазара и другие персонажи).

Согласно предыдущему списку, пример в стандарте ISO C (199712L) будет соответствовать ISO/IEC 10646-1:1993 + Поправки 1-4,6-9, тогда как glibc 200009L будет соответствовать ISO/IEC 10646-1: 2000. Пример в стандарте ISO C находится непосредственно перед Поправкой 5, которая перемещала и реорганизовывала блок Hangul, несовместимое изменение, иногда называемое "корейским беспорядком", о котором прямо упоминается в UTF-8 RFC и в других местах.

Для полноты, вот соответствие между Unicode и ISO 10646, скомпилированное из данных http://www.unicode.org/history/publicationdates.html:

  • 1991-10 Unicode 1.0.0
  • 1992-06 Unicode 1.0.1
  • 1993-06 Unicode 1.1 ISO/IEC 10646-1:1993
  • 1996-07 Unicode 2.0 ISO/IEC 10646-1:1993 + Поправки 5-7
  • 1998-05 Unicode 2.1 ISO/IEC 10646-1:1993 + Поправки 5-7 + 2 символа из Поправки 18 (знак евро + символ замены объекта (U + FFFC))
  • 1999-09 Unicode 3.0 ISO/IEC 10646-1: 2000
  • 2001-03 Unicode 3.1 ISO/IEC 10646-1: 2000 + ISO/IEC 10646-2: 2001
  • 2002-03 Unicode 3.2 ISO/IEC 10646-1: 2000 + Поправка 1 + ISO/IEC 10646-2: 2001
  • 2003-04 Unicode 4.0 ISO/IEC 10646: 2003
  • 2005-03 Unicode 4.1 ISO/IEC 10646: 2003 + Поправка 1
  • 2006-07 Unicode 5.0 ISO/IEC 10646: 2003 + Поправки 1-2 + 4 символа из Поправки 3 (буквы Деванагари GGA, JJA, DDDA, BBA)
  • 2008-04 Unicode 5.1 ISO/IEC 10646: 2003 + Поправки 1-4
  • 2009-10 Unicode 5.2 ISO/IEC 10646: 2003 + Поправки 1-6
  • 2010-10 Unicode 6.0 ISO/IEC 10646: 2011 + знак индийской рупии.
  • 2012-01 Unicode 6.1 ISO/IEC 10646: 2012
  • 2012-09 Unicode 6.2 ISO/IEC 10646: 2012 + знак турецкой лиры (включен в Amd.1)
  • 2013-09 Юникод 6.3 ISO/IEC 10646: 2012 + знак Турецкой лиры + двунаправленные изоляты (LRI, RLI, FSI, PDI) + арабская буква MARK (ALM) (входит в Amd.2 )
  • 2014-06Unicode 7.0 ISO/IEC 10646: 2012 + Поправки 1-2 + Рублевый знак (для включения в ISO/IEC 10646: 2014).

Unicode имеет несколько несовместимых изменений в свойствах символов (не относится к ISO/IEC 10646). Некоторые из них упоминаются в предложении для дополнения Cherokee, а в RFC6452 (Кодовые точки Юникода и интернационализированные имена доменов для Приложения (IDNA) - Unicode 6.0):

  • Unicode 3.0.0: U + 01AA (LATIN LETTER REVERSED ESH LOOP), U + 01BE (LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE), U + 01BF (LATIN LETTER WYNN), U + 03F3 (GREEK LETTER YOT) изменено их общая категория от Lo до Ll.
  • Unicode 3.0.0: U + 04C0 (CYRILLIC LETTER PALOCHKA) изменил свою общую категорию от Lo до Lu.
  • Unicode 4.1.0: U + A015 (YI SYLLABLE WU) изменил свою общую категорию с Lo на Lm.
  • Unicode 5.0.0: U + 10341 (GOTHIC LETTER NINETY) изменил свою общую категорию с Lo на Nl.
  • Unicode 6.0: U + 0CF1 (KANNADA SIGN JIHVAMULIYA), U + 0CF2 (KANNADA SIGN UPADHMANIYA) изменили свою общую категорию от So до Lo.
  • Unicode 6.0: U + 19DA (NEW TAI LUE THAM DIGIT ONE) изменил свою общую категорию с Nd на No.
  • В самом предложении Cherokee предлагается изменить существующих персонажей чероки с Lo на Ll.

Политика стабильности Unicode находится в http://www.unicode.org/policies/stability_policy.html. В частности, для Unicode 2.0 и выше, как только символ закодирован, он не будет перемещен или удален и его имя не будет изменено; для Unicode 5.0 и выше, именованные последовательности символов и формальные псевдонимы, назначенные символу, не будут изменены или удалены.

Ответ 2

В соответствии с текущими датами публикации UNICODE, следующие значения будут (и максимально конкретны):

  • 199110L
  • 199206L
  • 199306L
  • 199507L
  • 199607L
  • 199805L
  • 199808L
  • 199812L
  • 199904L
  • 199909L
  • 200009L
  • 200103L
  • 200203L
  • 200304L
  • 200503L
  • 200607L
  • 200803L
  • 200910L
  • 201201L
  • 201209L
  • 201309L
  • 201406L

Однако обратите внимание, что C (и С++) имеют только несколько стандартов: 89, 90, 95, 99, 03 (С++) и 11 (с предварительным 14 в будущем). Широкие символы не появлялись до 95!

Это означает, что только небольшой выбор этих значений будет разумно встречен; на моей (разумно) обновленной системе (gcc версии 4.6.3), я получаю 200009L.

Ответ 3

6.10.8 Предопределенные имена макросов 2

Целочисленная константа формы yyyymmL (например, 199712L). Если этот символ определен, то каждый символ в Юникоде требуется set, когда он хранится в объекте типа wchar_t, имеет то же значение, что и короткий идентификатор этого символа. Требуемый Unicode набор состоит из всех символов, которые определены в ISO/IEC 10646, наряду со всеми поправками и техническими исправлениями, начиная с указанный год и месяц.

Ответ 4

Вопрос не имеет окончательного ответа, так как скорее всего будут выпущены другие версии стандарта.

Кроме того, авторитетный временный ответ стоит 198 швейцарских франков и защищен авторским правом.

Ответ 5

Нет окончательного списка, так как ответ соответствует конкретной версии библиотеки.

Если ваш код должен зависеть от конкретной версии Unicode (скажем, 1997), тогда вы должны закодировать возможность того, что 1997 год недоступен, но 1998 год, и изящно изящно, если библиотека не поддерживает тот, который вы хотите.

Тогда это сводится к:

if(__STDC_ISO_10646__ % 199700)
{
}
else if(__STDC_ISO_10646__ & 199800)
{
}