Являются ли wchar_t и многобайтовые функции частью ANSI C?
C99
а также C11
служба поддержки wchar_t
и многобайтовые функции. Но я не уверен насчет ANSI C
(1989).
Это правильно, что wchar_t
и многобайтовые функции (mblen
, mbstowcs
, mbtowc
, wcstombs
, wctomb
) являются частью ANSI C?
Я не нахожу эти функции в книге Кернигана и Ричи (язык программирования Си (2-е издание)).
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
3 ответа
Имя wchar_t
находится в стандарте (ах) C89 (и C99), но это не поддерживаемый языком тип. Это typedef
для некоторого целочисленного типа, способного содержать необходимое количество битов. C89 7.1.6 [Стандартные определения] гласит:
wchar_t
который является целочисленным типом, диапазон значений которого может представлять различные коды для всех членов наибольшего расширенного набора символов, указанного среди поддерживаемых локалей; нулевой символ должен иметь нулевое кодовое значение, и каждый член базового набора символов, определенного в 5.2.1, должен иметь кодовое значение, равное его значению, когда он используется как одиночный символ в константе целочисленного символа.
Это означает, что кто-то может определить wchar_t
быть тем, что они хотят в C89 до тех пор, пока <stddef.h>
не было #include
д.
В C++ это незаконно; wchar_t - это ключевое слово на этом языке.
Что касается многобайтовых функций, на которые вы ссылались, они, похоже, являются частью C89. Раздел 7.10.7 [Функции многобайтовых символов] определяет mblen
, mbtowc
, wctomb
и 7.10.8 [Многобайтовые строковые функции] определяет mbstowcs
, а также wcstombs
(все в <stdlib.h>
). Обратите внимание, конечно, что, поскольку C89 не имеет const
что const
Квалифицированные версии этих функций недоступны.
wchar_t
это отлично C89 стандарт. В моем издании wchar_t
упоминается в разделе § A2.5.2 в книге Кернигана и Ричи.