Exportar (0) Imprimir
Expandir todo
Este tema aún no ha recibido ninguna valoración - Valorar este tema

Asignaciones de texto genérico en TCHAR.H

Actualización: noviembre 2007

Para simplificar la conversión de código para uso internacional, la biblioteca en tiempo de ejecución de Microsoft proporciona asignaciones de texto genérico específicas de Microsoft para muchos tipos de datos, rutinas y otros objetos. Se pueden utilizar estas asignaciones, que están definidas en Tchar.h, para crear código genérico que se puede compilar para un solo byte, para multibyte o para Unicode, en función de la constante de manifiesto que se defina con la instrucción #define. Las asignaciones de texto genérico son extensiones de Microsoft que no son compatibles con ANSI.

Si se utiliza el archivo Tchar.h, se pueden generar aplicaciones de un solo byte, MBCS y Unicode a partir de los mismos códigos fuente. Tchar.h define macros que empiezan por _tcs, que, con las definiciones de preprocesador correctas, se asignan a las funciones str, _mbs o wcs, según proceda. Para generar MBCS, se ha de definir el símbolo _MBCS. Para generar Unicode, se ha de definir el símbolo _UNICODE. Para generar una aplicación de un solo byte, no hay que definir ningún símbolo (opción predeterminada). De forma predeterminada, _MBCS está definido para aplicaciones MFC.

El tipo de datos _TCHAR se define de forma condicional en Tchar.h. Si se ha definido el símbolo _UNICODE para la versión, _TCHAR se define como wchar_t; en caso contrario, para versiones MBCS y de un solo byte, se define como char. (wchar_t, que es el tipo de datos básico de caracteres anchos de Unicode, es el equivalente de 16 bits a un char de 8 bits con signo.) Para aplicaciones internacionales, se ha de utilizar la familia de funciones _tcs, que se ejecuta en unidades _TCHAR, no en bytes. Por ejemplo, _tcsncpy copia n_TCHAR, no n bytes.

Dado que algunas funciones de control de cadenas SBCS reciben parámetros char* (con signo), se genera una advertencia del compilador indicando que el tipo no coincide cuando se define _MBCS. Hay tres formas de evitar esta advertencia, que se enumeran por orden de eficacia:

  1. Utilice los procesadores de función inline con seguridad de tipos en Tchar.h. Éste es el comportamiento predeterminado.

  2. Utilice las macros directas en Tchar.h definiendo _MB_MAP_DIRECT en la línea de comandos. Si lo hace, deberá hacer coincidir los tipos manualmente. Este es el método más rápido, pero no garantiza la seguridad de tipos.

  3. Utilice los procesadores de función de biblioteca vinculada estáticamente con seguridad de tipos presentes en Tchar.h. Para ello, defina la constante _NO_INLINING en la línea de comandos. Este es el método más lento, pero garantiza prácticamente la seguridad de tipos.

Directivas de preprocesador para asignaciones de texto genérico

# define

Versión compilada

Ejemplo

_UNICODE

Unicode (carácter ancho)

_tcsrev se asigna a _wcsrev

_MBCS

Carácter multibyte

_tcsrev se asigna a _mbsrev

Ninguno (opción predeterminada: no se define _UNICODE ni _MBCS)

SBCS (ASCII)

_tcsrev se asigna a strrev

Por ejemplo, la función de texto genérico _tcsrev, definida en Tchar.h, se asigna a _mbsrev si se ha definido _MBCS en el programa, o a _wcsrev si se ha definido _UNICODE. De lo contrario, _tcsrev se asigna a strrev. Las asignaciones de otros tipos de datos se proporcionan en Tchar.h para mayor comodidad en la programación, pero _TCHAR es la más útil.

Asignaciones de tipos de datos de texto genérico

Texto genérico

Nombre de tipo de datos

_UNICODE y

_MBCS no definidos

_MBCS

Definido

_UNICODE

Definido

_TCHAR

char

char

wchar_t

_TINT

int

int

wint_t

_TSCHAR

signed char

signed char

wchar_t

_TUCHAR

unsigned char

unsigned char

wchar_t

_TXCHAR

char

unsigned char

wchar_t

_T o _TEXT

Sin efecto (eliminado por el preprocesador)

Sin efecto (eliminado por el preprocesador)

L (convierte el carácter o cadena siguiente en su equivalente de Unicode)

Para obtener una lista completa de las asignaciones de texto genérico de rutinas, variables y otros objetos, vea Asignaciones de texto genérico en la Referencia de la biblioteca en tiempo de ejecución.

c426s321.alert_note(es-es,VS.90).gifNota:

No utilice la familia str de funciones con cadenas de Unicode, ya que probablemente contendrán bytes nulos incrustados. De forma similar, no utilice la familia wcs de funciones con cadenas MBCS (o SBCS).

Los siguientes fragmentos de código muestran el uso de _TCHAR y _tcsrev para la asignación con los modelos MBCS, Unicode y SBCS.

_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);

Si se ha definido _MBCS, el preprocesador asigna este fragmento al código:

char *RetVal, *szString;
RetVal = _mbsrev(szString);

Si se ha definido _UNICODE, el preprocesador asigna este fragmento al código:

wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);

Si no se han definido _MBCS ni _UNICODE, el preprocesador asigna el fragmento a código ASCII de un solo byte:

char *RetVal, *szString;
RetVal = strrev(szString);

Por consiguiente, se puede crear, mantener y compilar un único archivo de código fuente para su ejecución con rutinas específicas de cualquiera de los tres tipos de juegos de caracteres.

¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.