C (lenguaje de programación), 4ª Parte, Constantes

Se entiende por constantes aquel tipo de información numérica o alfanumérica que no puede cambiar más que con una nueva compilación del programa. Como ya se ha dicho anteriormente, en el código de un programa en C pueden aparecer diversos tipos de constantes que se van a explicar a continuación.

Constantes numéricas, Constantes enteras. Una constante entera decimal está formada por una secuencia de dígitos del 0 al 9, constituyendo un número entero. Las constantes enteras decimales están sujetas a las mismas restricciones de rango que las variables tipo int y long, pudiendo también ser unsigned. El tipo de una constante se puede determinar automáticamente según su magnitud, o de modo explícito postponiendo ciertos caracteres, como en los ejemplos que siguen:

23484 constante tipo int

45815 constante tipo long (es mayor que 32767)

253u ó 253U constante tipo unsigned int

739l ó 739L constante tipo long

583ul ó 583UL constante tipo unsigned long

En C se pueden definir también constantes enteras octales, esto es, expresadas en base 8 con dígitos del 0 al 7. Se considera que una constante está expresada en base 8 si el primer dígito por la izquierda es un cero (0). Análogamente, una secuencia de dígitos (del 0 al 9) y de letras (A, B, C, D, E, F) precedida por 0x o por 0X, se interpreta como una constante entera hexadecimal, esto es, una constante numérica expresada en base 16. Por ejemplo:

011 constante octal (igual a 9 en base 10)

11 constante entera decimal (no es igual a 011)

0xA constante haxadecimal (igual a 10 en base 10)

0xFF constante hexadecimal (igual a 162-1=255 en base 10)

Es probable que no haya necesidad de utilizar constantes octales y hexadecimales, pero conviene conocer su existencia y saber interpretarlas por si hiciera falta. La ventaja de los números expresados en base 8 y base 16 proviene de su estrecha relación con la base 2 ( 8 y 16 son potencias de 2), que es la forma en la que el ordenador almacena la información.

Constantes de punto flotante. Como es natural, existen también constantes de punto flotante, que pueden ser de tipo float, double y long double. Una constante de punto flotante se almacena de la misma forma que la variable correspondiente del mismo tipo. Por defecto –si no se indica otra cosa– las constantes de punto flotante son de tipo double. Para indicar que una constante es de tipo float se le añade una f o una F; para indicar que es de tipo long double, se le añade una l o una L. En cualquier caso, el punto decimal siempre debe estar presente si se trata de representar un número real.

Estas constantes se pueden expresar de varias formas. La más sencilla es un conjunto de dígitos del 0 al 9, incluyendo un punto decimal. Para constantes muy grandes o muy pequeñas puede utilizarse la notación científica; en este caso la constante tiene una parte entera, un punto decimal, una parte fraccionaria, una e o E, y un exponente entero (afectando a la base 10), con un signo opcional. Se puede omitir la parte entera o la fraccionaria, pero no ambas a la vez. Las constantes de punto flotante son siempre positivas. Puede anteponerse un signo (-), pero no forma parte de la constante, sino que con ésta constituye una expresión, como se verá más adelante. A continuación se presentan algunos ejemplos válidos:

1.23 constante tipo double (opción por defecto)

23.963f constante tipo float

.00874 constante tipo double

23e2 constante tipo double (igual a 2300.0)

.874e-2 constante tipo double en notación científica (=.00874)

.874e-2f constante tipo float en notación científica

seguidos de otros que no son correctos:

1,23 error: la coma no esta permitida

23963f error: no hay punto decimal ni carácter e ó E

.e4 error: no hay ni parte entera ni fraccionaria

-3.14 error: sólo el exponente puede llevar signo

Constantes carácter. Una constante carácter es un carácter cualquiera encerrado entre apóstrofos (tal como ‘x’ o ‘t’). El valor de una constante carácter es el valor numérico asignado a ese carácter según el código ASCII (ver Tabla 2.3). Conviene indicar que en C no existen constantes tipo char; lo que se llama aquí constantes carácter son en realidad constantes enteras.

Hay que señalar que el valor ASCII de los números del 0 al 9 no coincide con el propio valor numérico. Por ejemplo, el valor ASCII de la constante carácter ‘7’ es 55. Ciertos caracteres no representables gráficamente, el apóstrofo (‘) y la barra invertida (\) y otros caracteres, se representan mediante la siguiente tabla de secuencias de escape, con ayuda de la barra invertida (\) elevado a 4.

Los caracteres ASCII pueden ser también representados mediante el número octal correspondiente, encerrado entre apóstrofos y precedido por la barra invertida. Por ejemplo, ‘7’ y ‘\7′ representan el número 7 del código ASCII (sin embargo, ’07’ es la representación octal del carácter ‘7’), que es el sonido de alerta. El ANSI C también admite secuencias de escape hexadecimales, por ejemplo ‘\x1a’.

Cadenas de caracteres. Una cadena de caracteres es una secuencia de caracteres delimitada por comillas (“), como por ejemplo: “Esto es una cadena de caracteres”. Dentro de la cadena, pueden aparecer caracteres en blanco y se pueden emplear las mismas secuencias de escape válidas para las constantes carácter. Por ejemplo, las comillas (“) deben estar precedidas por (\), para no ser interpretadas como fin de la cadena; también la propia barra invertida (\). Es muy importante señalar que el compilador sitúa siempre un byte nulo () adicional al final de cada cadena de caracteres para señalar el final de la misma. Así, la cadena “mesa” no ocupa 4 bytes, sino 5 bytes. A continuación se muestran algunos ejemplos de cadenas de caracteres:

"Informática I"

"'A'"

" cadena con espacios en blanco "

"Esto es una \"cadena de caracteres\".\n"

Constantes de tipo Enumeración. En C existen una clase especial de constantes, llamadas constantes enumeración. Estas constantes se utilizan para definir los posibles valores de ciertos identificadores o variables que sólo deben poder tomar unos pocos valores. Por ejemplo, se puede pensar en una variable llamada dia_de_la_semana que sólo pueda tomar los 7 valores siguientes: lunes, martes, miercoles, jueves, viernes, sabado y domingo. Es muy fácil imaginar otros tipos de variables análogas, una de las cuales podría ser una variable booleana con sólo dos posibles valores: SI y NO, o TRUE y FALSE, u ON y OFF. El uso de este tipo de variables hace más claros y legibles los programas, a la par que disminuye la probabilidad de introducir errores.

En realidad, las constantes enumeración son los posibles valores de ciertas variables definidas como de ese tipo concreto. Considérese como ejemplo la siguiente declaración:

enum dia {lunes, martes, miercoles, jueves, viernes, sabado, domingo};

Esta declaración crea un nuevo tipo de variable –el tipo de variable dia– que sólo puede tomar uno de los 7 valores encerrados entre las llaves. Estos valores son en realidad constantes tipo int: lunes es un 0, martes es un 1, miercoles es un 2, etc. Ahora, es posible definir variables, llamadas dia1 y dia2, que sean de tipo dia, en la forma (obsérvese que en C deben aparecer las palabras enum dia; en C++ basta que aparezca la palabra dia)

enum dia dia1, dia2; // esto es C

dia dia 1, dia 2; // esto es C++

y a estas variables se les pueden asignar valores en la forma

dia1 = martes;

o aparecer en diversos tipos de expresiones y de sentencias que se explicarán más adelante. Los valores enteros que se asocian con cada constante tipo enumeración pueden ser controlados por el programador. Por ejemplo, la declaración,

enum dia {lunes=1, martes, miercoles, jueves, viernes, sabado, domingo};

asocia un valor 1 a lunes, 2 a martes, 3 a miercoles, etc., mientras que la declaración,

enum dia {lunes=1, martes, miercoles, jueves=7, viernes, sabado, domingo};

asocia un valor 1 a lunes, 2 a martes, 3 a miercoles, un 7 a jueves, un 8 a viernes, un 9 a sabado y un 10 a domingo.

Se puede también hacer la definición del tipo enum y la declaración de las variables en una única sentencia, en la forma

enum palo {oros, copas, espadas, bastos} carta1, carta2, carta3;

donde carta1, carta2 y carta3 son variables que sólo pueden tomar los valores oros, copas, espadas y bastos (equivalentes respectivamente a 0, 1, 2 y 3).

Cualificador CONST. Se puede utilizar el cualificador const en la declaración de una variable para indicar que esa variable no puede cambiar de valor. Si se utiliza con un array, los elementos del array no pueden cambiar de valor. Por ejemplo:

const int i=10;

const double x[] = {1, 2, 3, 4};

El lenguaje C no define lo que ocurre si en otra parte del programa o en tiempo de ejecución se intenta modificar una variable declarada como const. De ordinario se obtendrá un mensaje de error en la compilación si una variable const figura a la izquierda de un operador de asignación. Sin embargo, al menos con el compilador de Microsoft, se puede modificar una variable declarada como const por medio de un puntero de la forma siguiente:

const int i=10;

int *p;

p = &i;

*p = 1;

C++ es mucho más restrictivo en este sentido, y no permite de ningumamanera modificar las variables declaradas como const.

El cualificador const se suele utilizar cuando, por motivos de eficiencia, se pasan argumentos por referencia a funciones y no se desea que dichos argumentos sean modificados por éstas.

Dejo una pequeña galería:

y Un Saludo.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s