Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


2.2.1a1  El carácter ancho

§1  Introducción

Respecto al problema someramente esbozado en el apartado anterior ( 2.2.1a), de representar los caracteres de lenguas distintas del inglés americano.  En los compiladores C y C++ se decidió utilizar un nuevo tipo, denominado carácter ancho o DBCS ("Double Byte Character Set"), en atención a que como veremos a continuación, la mayoría de las veces ocupa dos Bytes.

El carácter ancho se designa con la palabra wchar_t.  En C se utilizó un typdef ( 3.2.1a, <stddef.h>) para definirlo, pero en C++ tomó carta de naturaleza como un nuevo tipo preconstruido en el lenguaje, de forma que de ser un typedef pasó a ser palabra clave.

§2  wchar_t

En C++ esta palabra clave identifica un tipo especial, el carácter ancho.

Sintaxis:

wchar_t  <identificador>;

Comentario

El Estándar C++ nos dice que su tamaño es dependiente de la implementación, pero que debe ser suficiente para almacenar el juego de caracteres mayor que soporte el compilador.  Como actualmente el juego de caracteres internacional es Unicode ( 2.2.1a2) que utiliza 2 bytes, este es el tamaño mínimo del wchar_t de la mayoría de compiladores.

Nota: en el caso de Borland C++ es del mismo tamaño, signo y alineación que el tipo int, es decir 4 bytes (un wchar_t  C es de solo 2 bytes), mientras que el wchar_t de MS Visual C++ es de 2 bytes.


Tenga en cuenta, que la librería Estándar C++ utiliza funciones distintas para manejar caracteres anchos y normales.  Por ejemplo, la función printf  para caracteres tipo char, tiene una versión wprintf cuando se trata de representar caracteres tipo wchar_t; a su vez, strlen ("string length") tiene la versión wcslen ("wide-character string length") para caracteres anchos.  wcout es la versión de cout para caracteres anchos.  Etc. (existen dos versiones de todas aquellas funciones que manejan cadenas alfanuméricas).

Ejemplos

wchar_t ch;                 // declaración de carácter ancho

wchar_t* str = L"ABCD";     // puntero a cadena de caracteres anchos

wcout << "La cadena es: " << str << endl;    // L.3

wcout << L"La cadena es: " << str << endl;   // L.4

wchar_t cnulo = L'\0'       // carácter nulo ancho

Comentario:

Las sentencias L.3 y L.4 son equivalentes; la salida en ambos casos es:

La cadena es:  ABCD

Observe que en L.3 el compilador es suficientemente inteligente para suponer que el literal "La cadena es: " es de caracteres anchos.