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]


3.2.3e Secuencias de escape

§1 Sinopsis

Como se indicó al tratar del código ASCII ( 2.2.1a), existen 33 de estos caracteres que no tienen representación gráfica; son los denominados caracteres de control. Con el fin de poder representarlos en el código fuente, se recurrió al artificio de representarlos utilizando una barra invertida (\) seguida de otra serie de caracteres.

§2 Secuencias de escape

Las secuencias de caracteres en las que el primero es la barra invertida, se denominaron secuencias de escape y aunque originariamente se utilizaron para la representación de los caracteres de control, por extensión pueden representarse de este modo todos los códigos ASCII. Además se dispone de algunos símbolos predefinidos para los caracteres más frecuentes. Por ejemplo, \n se utiliza para representar el carácter nueva línea (decimal 10). Los símbolos utilizados se muestran en la tabla adjunta.

Secuencia   Valor     Símbolo    Descripción                           

 \a               0x07         BEL         Sonido audible (bell)

 \b               0x08         BS           Retroceso (backspace)

 \f                0x0C         FF           Salto de formato (formfeed)

 \n               0x0A         LF           Saltar una línea (linefeed)

 \r                0x0D         CR           Retorno de carro (carriage return)

 \t                0x09         HT            Tabulación horizontal (H Tab)

 \v               0x0B         VT            Tabulación vertical (V Tab)

 \\                0x5c          \              Barra invertida (backslash) [2]

 \'                0x27          '               Apóstrofo (comilla simple)

 \"               0x22          "               Doble comilla

 \?               0x3F         ?               Interrogación

 \O           cualquiera  cualquiera     O = cadena de hasta tres dígitos octales

 \xH         cualquiera  cualquiera     H = cadena de dígitos hexadecimales

 \XH         cualquiera  cualquiera     H = cadena de dígitos hexadecimales

Ejemplo

char campana = '\a';      // carácter ASCII 7

cout << campana << endl;  // genera un sonido audible


§3 La barra invertida ( \ ) se utiliza junto con números octales o hexadecimales [3] para representar símbolos ASCII ( 2.2.1a), incluyendo los denominados caracteres de control (también llamados caracteres no imprimibles) que no tienen representación directa en ningún carácter.

En una secuencia de escape se pueden utilizar hasta tres caracteres en octal o cualquier número de caracteres en hexadecimal. Siempre que los valores estén dentro del rango legal para el tipo char (de 0 a 0xff para C++Builder).

§3.1 Octal  

Rango: \0 a \377

Ejemplos:

\0  Carácter nulo (fin de cadena)
\03 Ctr-C
\07 Bell
\013 Vertical TAB
\077 ?

§3.2  Hexadecimal  

Rango \x00  a \xFF

Ejemplos:

\0 

Carácter nulo (fin de cadena)

\x3

Ctr-C

\x7

Bell

\xB

Vertical TAB

\x3F

?

§4  Los números mayores que los indicados generan un error de compilación:  Numeric constant too large. Por ejemplo, el octal \777 es mayor que el máximo permitido (\377), por lo que produciría un error. El primer carácter no octal o no hexadecimal que se encuentre en una secuencia octal o hexadecimal respectivamente, señala el final de la secuencia de escape. Por ejemplo:

printf("\x072.1Un Sistema Operativo");

La sentencia anterior debería ser interpretada como el hexadecimal \x07 (BEL) y 2.1 Un Sistema Operativo, aunque quizás el compilador lo interprete como hexadecimal \x072 (el carácter "r") y la cadena literal .1Un sistema Operativo. Para evitar este tipo de ambigüedades debe escribirse:

printf("\x07" "2.1Un Sistema Operativo");

También pueden darse ambigüedades si una secuencia de escape en octal es seguida por un número no octal. Por ejemplo, dado que los dígitos 8 y 9 no son octales válidos, la constante \258 puede ser interpretada como una constante de dos caracteres \25 (Ctrl-U) y un 8.

§5 Trigrafos

Con la extensión de la informática a países distintos del ámbito anglosajón, se presentaba con frecuencia el problema de tener que escribir determinados caracteres del lenguaje C++ (Us-ASCII) que no estaban presentes en determinados teclados. Por ejemplo, en la mayoría de teclados en Español, no existe la tilde ~ como un carácter independiente, lo que no es inconveniente para la escritura normal, ya que la única ocurrencia en este signo en Español es en la letra eñe "Ñ" que sí dispone de su correspondiente tecla. Pero la referida ausencia de la tilde como símbolo independiente, resulta una molestia para los programadores, ya que el fuente requiere en ocasiones incluir dicho símbolo. Para resolver el problema se adoptó el convenio que estos caracteres conflictivos podían representarse en el código fuente mediante parejas y ternas de caracteres, los denominados dígrafos y trígrafos, que se muestran en la tabla adjunta.

Trígrafo Carácter Dígrafo

 ??=     #     %:

 ??(     [     <:

 ??)     ]     :>

 ??/     \

 ??'     ^

 ??<     {     <%

 ??>     }     %>

 ??!     |

 ??-     ~

Nota: la interpretación de estos trígrafos retarda considerablemente la acción del compilador, por lo que Borland C++ incluye un traductor específico, el programa trigraph.exe, que puede traducir el código fuente antes de la compilación [4].

Tema relacionado: Representación explícita de operadores lógicos ( 4.9.8).

  Inicio.


[2]  Para representar la barra invertida debe utilizarse \\.

[3]  Observe que en este caso, los Hexadecimales ( 2.2.4b) empiezan por \x ó \X sin el cero inicial (no es \0x !!)

[4]  En cualquier caso, el preprocesador que acompaña al compilador Borland C++ 5.5 para Windows 32 no soporta la interpretación de trígrafos, por lo que es obligatorio pasar previamente esta utilidad sobre los fuentes y ficheros de cabecera en caso que se hayan utilizado.