2013-04-15 2 views
3

C99 и C11 поддержка wchar_t и многобайтовые функции. Но я не уверен насчет ANSI C (1989).Являются ли функции wchar_t и multibyte частью ANSI C?

ли это исправить, что wchar_t и мультибайтные функции (mblen, mbstowcs, mbtowc, wcstombs, wctomb) являются частью ANSI C?

Я не нахожу эти функции в книге Кернигана и Ричи (язык программирования C (второе издание)).

http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628

+0

Возможно, у вас есть 1-е издание (1978) книги? – pmg

ответ

3

Это имя wchar_t находится в стандарте (-ях) C89 (и C99), но оно не является поддерживающим langauge типом. Это typedef для некоторого целочисленного типа, способного удерживать требуемое количество бит. C89 7.1.6 [Стандартные определения] говорит:

wchar_t
который представляет собой интегральный тип которого диапазон значений может представляют различные коды для всех членов самого большого расширенного набора символов заданного числа поддерживаемых регионов; символ нуль должен иметь нулевое значение кода, а каждый элемент базового набора символов , определенный в 5.2.1, должен иметь значение кода, равное его значению , при использовании в качестве одиночного символа в целочисленном символе константа.

Это означает, что кто-то может определить wchar_t быть все, что они хотят в C89, пока <stddef.h> не было #include d.

В C++ это незаконно; wchar_t - это ключевое слово на этом языке.

Что касается многобайтовых функций, на которые вы ссылаетесь, они, как представляется, являются частью C89. Раздел 7.10.7 [Многобайтовые функции символов] определяет mblen, mbtowc, wctomb и 7.10.8 [Многобайтовые строковые функции] определяет mbstowcs и wcstombs (все в <stdlib.h>). Обратите внимание, конечно, что, поскольку C89 не имеет const, что const -qualified версии этих функций недоступны.

2

wchar_t является частью ANSI C (1989).

+0

Но почему Ритчи не хватает многобайтовых функций в своей книге? –

+0

Не в моей копии ... ухаживать за ссылкой? Он, конечно, не указан в 6.1.1 [Keywords] на моей копии. –

+1

, если вы перейдете на страницу 272 индекса книг, используя функцию «Look Inside» на странице amazon, с которой вы связались, вы увидите 'wchar_t' – AShelly

1

wchar_t - совершенно C89 стандарт. В моем выпуске wchar_t упоминается в разделе § A2.5.2 в книгах Кернигана и Ричи.

+0

Я не мог найти многобайтовые функции. –

+1

В A2.5.2 есть заметка, которая заставляет меня поверить, что это ('wchar_t') было введено во втором издании книги:« ... главное намерение добавления «wchar_t» состояло в том, чтобы разместить азиатские языки.* * Примечание: 1-е издание было опубликовано в 1978 году. * – pmg

+0

@pmg: Если вы так поверили, то найдите стандартную ссылку для его поддержки. –

Смежные вопросы