Sie sind auf Seite 1von 11

1

Proceso para la obtencin de un programa ejecutable



Probablemente este es un buen momento para explicar cmo se obtiene un fichero
ejecutable a partir de un programa C++. Para empezar necesitamos un poco de vocabulario
tcnico. Veremos algunos conceptos que se manejan frecuentemente en cualquier curso de
programacin y sobre todo en manuales de C y C++.
Fichero fuente y programa o cdigo fuente
Los programas C y C++ se escriben con la ayuda de un editor de textos del mismo modo que
cualquier texto corriente. Los ficheros que contiene programas en C o C++ en forma de texto
se conocen como ficheros fuente, y el texto del programa que contiene se conoce como
programa fuente. Nosotros siempre escribiremos programas fuente y los guardaremos en
ficheros fuente.
Intrpretes y compiladores
Antes, mencionar que tanto C como C++ son lenguajes compilados, y no interpretados. Esta
diferencia es muy importante, ya que afecta mucho a muchos aspectos relacionados con la
ejecucin del programa.
En un lenguaje interpretado, el programa est escrito en forma de texto, es el propio
programa fuente. Este programa fuente es procesado por un programa externo, el intrprete,
que traduce el programa, instruccin a instruccin, al tiempo que lo ejecuta.
En los lenguajes interpretados no existen programas ejecutables directamente por el
ordenador. El intrprete traduce, en tiempo real, cada lnea del programa fuente, cada vez que
se quiere ejecutar el programa.
En los lenguajes compilados el proceso de traduccin slo se hace una vez. El programa
compilador toma como entrada el cdigo fuente del programa, y da como salida un fichero
que puede ser ejecutado por el ordenador directamente.
Una vez compilado, el programa ejecutable es autnomo, y ya no es necesario disponer del
programa original ni del compilador para ejecutarlo.
Cada opcin tiene sus ventajas e inconvenientes, y algunas caractersticas que son
consideradas una ventaja, pueden ser un inconveniente en ciertas circunstancias, y viceversa.
Los lenguajes interpretados son fcilmente modificables, ya que necesitamos tener el el cdigo
fuente disponible en el ordenador. En los compilados, estos ficheros no son necesarios, una
vez compilados.

2

Los lenguajes interpretados necesitan un programa externo, llamado intrprete o a veces
mquina virtual, o framework. Este programa actua como intermediario entre el fuente y el
sistema operativo. En los compilados ese papel lo desempea el compilador, pero al contrario
que con el intrprete, una vez ha hecho su trabajo, no es necesario que est presente para
ejecutar el programa.
Estas dos caractersticas, lgicamente, hacen que los programas compilados requieran menos
espacio de memoria que los interpretados (si contamos el espacio usado por el intrprete), y
en general, los compilados son ms rpidos, ya que slo se compilan una vez, y el tiempo
dedicado a esa tarea no se suma al de ejecucin.
Entre los lenguajes interpretados estn: BASIC (Cdigo de instrucciones de propsito general
para principiantes), Java, PHP. Muchos lenguajes de script, etc.
Entre los lenguajes compilados estn: C, C++, Pascal.
Ficheros objeto, cdigo objeto y compiladores
Como hemos dicho antes, en los lenguajes compilados, los programas fuente no pueden
ejecutarse. Son ficheros de texto, pensados para que los comprendan los seres humanos,
pero incomprensibles para los ordenadores.
Para conseguir un programa ejecutable hay que seguir algunos pasos. El primero es
compilar o traducir el programa fuente a su cdigo objeto equivalente. Este es el trabajo
que hacen los compiladores de C y C++. Consiste en obtener un fichero equivalente a
nuestro programa fuente comprensible para el ordenador, este fichero se conoce como
fichero objeto, y su contenido como cdigo objeto.
Los compiladores son programas traductores, que leen un fichero de texto que contiene el
programa fuente y generan un fichero que contiene el cdigo objeto.
El cdigo objeto no suele tener ningn significado para los seres humanos, al menos para
la mayora de los humanos que conozco, y menos directamente. Adems es diferente para
cada ordenador y para cada sistema operativo. Por lo tanto existen diferentes
compiladores para diferentes sistemas operativos y para cada tipo de ordenador.
Libreras o bibliotecas
Junto con los compiladores de C y C++, se incluyen ciertos ficheros llamados bibliotecas. Las
bibliotecas contienen el cdigo objeto de muchos programas que permiten hacer cosas
comunes, como leer el teclado, escribir en la pantalla, manejar nmeros, realizar funciones
matemticas, etc. Las bibliotecas estn clasificadas por el tipo de trabajos que hacen, hay
bibliotecas de entrada y salida, matemticas, de manejo de memoria, de manejo de textos,
etc.
Nota: Existe una discusin permanente sobre el nombre genrico de
estos ficheros. Una gran parte de personas consideran que el nombre
adecuado es ficheros de biblioteca, y he de decir que esencialmente
estoy de acuerdo con ellos. Sin embargo, la mayora llamamos a estos
ficheros libreras, y tambin me incluyo entre estos. El equvoco
proviene del nombre en ingls, que es ficheros library. Este trmino se

3

traduce como biblioteca, y no como librera, que es la palabra en espaol ms parecida
fonticamente. Sin embargo esta discusin es poco importante, desde nuestro punto de vista,
ya que nos entendemos igualmente con las dos palabras;Hay un conjunto de bibliotecas (o
libreras) muy especiales, que se incluyen con todos los compiladores de C y de C++. Son las
libreras (o bibliotecas) ANSI o estndar. Pero tambin las hay no estndar, y dentro de estas
las hay pblicas y comerciales. En este curso slo usaremos bibliotecas (o libreras) ANSI.
Ficheros ejecutables y enlazadores
Cuando obtenemos el fichero objeto, an no hemos terminado el proceso. El fichero objeto, a
pesar de ser comprensible para el ordenador, no puede ser ejecutado. Hay varias razones para
eso:
Nuestros programas usaran, en general, funciones que estarn incluidas en bibliotecas
externas, ya sean ANSI o no. Es necesario combinar nuestro fichero objeto con esas bibliotecas
para obtener un ejecutable. Muy a menudo, nuestros programas estarn compuestos por
varios ficheros fuente, y de cada uno de ellos se obtendr un fichero objeto. Es necesario unir
todos los ficheros objeto, ms las bibliotecas en un nico fichero ejecutable. Hay que dar
ciertas instrucciones al ordenador para que cargue en memoria el programa y los datos, y para
que organice la memoria de modo que se disponga de una pila de tamao adecuado, etc. La
pila es una zona de memoria que se usa para que el programa intercambie datos con otros
programas o con otras partes del propio programa. Veremos esto con ms detalle durante el
curso. No siempre obtendremos un fichero ejecutable para el cdigo que escribimos, a veces
querremos crear ficheros de biblioteca, y en ese caso el proceso ser diferente.Exist
Una vez terminada la fase de enlazado, ya podremos ejecutar nuestro e un programa que hace
todas estas cosas, se trata del "linker", o enlazador. El enlazador toma todos los ficheros
objeto que componen nuestro programa, los combina con los ficheros de biblioteca que sean
necesarios y crea un fichero ejecutable. programa.
Errores
Por supuesto, somos humanos, y por lo tanto nos equivocamos. Los errores de programacin
pueden clasificarse en varios tipos, dependiendo de la fase en que se presenten.
Errores de sintaxis: son errores en el programa fuente. Pueden deberse a palabras reservadas
mal escritas, expresiones errneas o incompletas, variables que no existen, etc. Los errores de
sintaxis se detectan en la fase de compilacin. El compilador, adems de generar el cdigo
objeto, nos dar una lista de errores de sintaxis. De hecho nos dar slo una cosa o la otra, ya
que si hay errores no es posible generar un cdigo objeto.

Avisos: adems de errores, el compilador puede dar tambin avisos (warnings). Los avisos son
errores, pero no lo suficientemente graves como para impedir la generacin del cdigo objeto.
No obstante, es importante corregir estos errores, ya que ante un aviso el compilador tiene
tomar decisiones, y estas no tienen por qu coincidir con lo que nosotros pretendemos hacer,
ya se basan en las directivas que los creadores del compilador decidieron durante la creacin
del compilador.




4

Errores de enlazado: el programa enlazador tambin puede encontrar errores. Normalmente
se refieren a funciones que no estn definidas en ninguno de los ficheros objetos ni en las
bibliotecas. Puede que hayamos olvidado incluir alguna biblioteca, o algn fichero objeto, o
puede que hayamos olvidado definir alguna funcin o variable, o lo hayamos hecho mal.
Errores de ejecucin: incluso despus de obtener un fichero ejecutable, es posible que se
produzcan errores. En el caso de los errores de ejecucin normalmente no obtendremos
mensajes de error, sino que simplemente el programa terminar bruscamente. Estos errores
son ms difciles de detectar y corregir. Existen programas auxiliares para buscar estos errores,
son los llamados depuradores (debuggers). Estos programas permiten detener la ejecucin de
nuestros programas, inspeccionar variables y ejecutar nuestro programa paso a paso
(instruccin a instruccin). Esto resulta til para detectar excepciones, errores sutiles, y fallos
que se presentan dependiendo de circunstancias distintas.
Errores de diseo: finalmente los errores ms difciles de corregir y prevenir. Si nos hemos
equivocado al disear nuestro algoritmo, no habr ningn programa que nos pueda ayudar a
corregir los nuestros. Contra estos errores slo cabe practicar y pensar.

Propsito de C y C++
Qu clase de programas y aplicaciones se pueden crear usando C y C++?
La respuesta es muy sencilla: TODOS.
Tanto C como C++ son lenguajes de programacin de propsito general. Todo puede
programarse con ellos, desde sistemas operativos y compiladores hasta aplicaciones de bases
de datos y procesadores de texto, pasando por juegos, aplicaciones a medida, etc.
Oirs y leers mucho sobre este tema. Sobre todo diciendo que estos lenguajes son
complicados y que requieren pginas y pginas de cdigo para hacer cosas que con otros
lenguajes se hacen con pocas lneas. Esto es una verdad a medias. Es cierto que un listado
completo de un programa en C o C++ para gestin de bases de datos (por poner un ejemplo)
puede requerir varios miles de lneas de cdigo, y que su equivalente en Visual Basic slo
requiere unos pocos cientos. Pero detrs de cada lnea de estos compiladores de alto nivel hay
cientos de lneas de cdigo en C, la mayor parte de estos compiladores estn respaldados por
enormes bibliotecas escritas en C. Nada te impide a ti, como programador, usar bibliotecas, e
incluso crear las tuyas propias.
Una de las propiedades de C y C++ es la reutilizacin del cdigo en forma de bibliotecas de
usuario. Despus de un tiempo trabajando, todos los programadores desarrollan sus propias
bibliotecas para aquellas cosas que hacen frecuentemente. Y adems, raramente piensan en
ello, se limitan a usarlas.
Adems, los programas escritos en C o C++ tienen otras ventajas sobre el resto. Con la
excepcin del ensamblador, generan los programas ms compactos y rpidos. El cdigo es
transportable, es decir, un programa ANSI en C o C++ podr ejecutarse en cualquier mquina y
bajo cualquier sistema operativo. Y si es necesario, proporcionan un acceso a bajo nivel de
hardware slo igualado por el ensamblador.
Otra ventaja importante es que C tiene ms de 30 aos de vida, y C++ casi 20 y no parece que
su uso se debilite demasiado. No se trata de un lenguaje de moda, y probablemente a ambos
les quede an mucha vida por delante. Slo hay que pensar que sistemas operativos como
Linux, Unix o incluso Windows se escriben casi por completo en C.
Por ltimo, existen varios compiladores de C y C++ gratuitos, o bajo la norma GNU, as como
cientos de bibliotecas de todo propsito y miles de programadores en todo el mundo, muchos
de ellos dispuestos a compartir su experiencia y conocimientos.


5

1 Toma de contacto
^
Me parece que la forma ms rpida e interesante de empezar, y no perder
potenciales seguidores de este curso, es mediante un ejemplo. Veamos nuestro
primer programa C++. Esto nos ayudar a establecer unas bases que resultarn
muy tiles para los siguientes ejemplos que irn apareciendo.
int main()
{
int numero;

numero = 2 + 2;
return 0;
}
No te preocupes demasiado si an no captas todos los matices de este pequeo
programa. Aprovecharemos la ocasin para explicar algunas de las peculiaridades
de C++, aunque de hecho, este programa es casi un ejemplo de programa C. Y
aunque eso es otro tema, podemos decir ahora que C++ incluye a C. En general, un
programa en C podr compilarse usando un compilador de C++. Pero ya veremos
este tema en otro lugar, y descubriremos en qu consisten las diferencias.
Iremos repasando, muy someramente, el programa, lnea a lnea:
- Primera lnea: "int main()"
Se trata de una lnea muy especial, y la encontrars en todos los programas C y
C++. Es el principio de la definicin de una funcin. Todas las funciones C y C++
toman unos valores de entrada, llamados parmetros o argumentos, y devuelven un
valor salida o retorno. La primera palabra: "int", nos dice el tipo del valor de
retorno de la funcin, en este caso un nmero entero (integer). La funcin "main"
siempre devuelve un entero. La segunda palabra es el nombre de la funcin, en
general ser el nombre que usaremos cuando queramos usar o llamar a la funcin.
Podemos considerar una funcin como una caja que procesa ciertos datos de
entrada para dar como retorno ciertos datos de salida.
C++ se basa en gran parte en C, y C fue creado en la poca de los lenguajes
procedimentales y est orientado a la programacin estructurada. Por lo tanto, C++
tiene tambin caractersticas vlidas para la programacin estructurada.
La programacin estructurada parte de la idea de que los programas se ejecutan
secuencialmente, lnea a lnea, sin saltos entre partes diferentes del programa, con
un nico punto de entrada y un punto de salida.
Pero si ese tipo de programacin se basase slo en esa premisa, no sera demasiado
til, ya que los programas seran poco manejables llegados a un cierto nivel de
complejidad.
La solucin es crear funciones o procedimientos, que se usan para realizar ciertas
tareas concretas y/o repetitivas.
Por ejemplo, si frecuentemente necesitamos mostrar un texto en pantalla, es mucho
ms lgico agrupar las instrucciones necesarias para hacerlo en una funcin, y usar
la funcin como si fuese una instruccin cada vez que queramos mostrar un texto
en pantalla.
La diferencia entre una funcin y un procedimiento est en si devuelven valores
cada vez que son invocados. Las funciones devuelven valores, y los procedimientos
no.

6

Lenguajes como Pascal hacen distinciones entre funciones y procedimientos, pero
C y C++ no existe esa diferencia. En stos slo existen funciones y para crear un
procedimiento se usa una funcin que devuelva un valor vaco.
Llamar o invocar una funcin es ejecutarla, la secuencia del programa contina en
el interior de la funcin, que tambin se ejecuta secuencialmente, y cuando termina,
se regresa a la instruccin siguiente al punto de llamada.
Las funciones a su vez, pueden invocar a otras funciones.
De este modo, considerando la llamada a una funcin como una nica instruccin
(o sentencia), el programa sigue siendo secuencial.
En este caso "main" es una funcin muy especial, ya que nosotros no la usaremos
nunca explcitamente, es decir, nunca encontrars en ningn programa una lnea
que invoque a la funcin "main". Esta funcin ser la que tome el control
automticamente cuando el sistema operativo ejecute nuestro programa.
Otra pista por la que sabemos que "main" es una funcin son los parntesis: todas
las definiciones de funciones incluyen una lista de argumentos de entrada entre
parntesis, en nuestro ejemplo es una lista vaca, es decir, nuestra funcin no
admite parmetros.
La picadora de nuestro dibujo admite
ciertos parmetros de entrada, por ejemplo, carne.
Tambin proporciona valores de salida o retorno, si
introducimos carne saldr carne picada, si se trata de
queso, la salida ser queso picado, etc.
Aunque dedicaremos varios captulos a las funciones,
podemos contar ahora algo ms sobre parmetros y
valores de retorno.
No siempre se proporcionan parmetros a las funciones,
o a veces no se porporcionan parmetros evidentes. Por
ejemplo, una funcin que lea una tecla no necesita ningn
parmetro de entrada, aunque muchos parmetros queden implcitos en la propia
funcin.
Del mismo modo, tambin existen funciones que no dan una salida, al menos no
una salida evidente. Por ejemplo, una funcin que espere un tiempo determinado.
En este caso no hay salida, slo transcurrir un lapso de tiempo.
- Segunda lnea: "{"
Aparentemente es una lnea muy simple, las llaves encierran el cuerpo o definicin
de la funcin. Ms adelante veremos que tambin tienen otros usos.
- Tercera lnea: "int numero;"
Esta es nuestra primera sentencia, todas las sentencias terminan con un punto y
coma. Esta concretamente es una declaracin de variable. Una declaracin nos dice,
a nosotros y al compilador, que usaremos una variable, a la que llamaremos
"numero" de tipo int integer (entero). Esta declaracin obliga al compilador a
reservar un espacio de memoria para almacenar la variable "numero", pero no le da
ningn valor inicial. En general contendr "basura", es decir, un valor
indeterminado e impredecible, que depender del contenido de esa zona de
memoria en el momento en que se reserv el espacio. En C++ es obligatorio
declarar las variables que se usarn en el programa.


7



- Cuarta lnea: ""
Una lnea vaca. Esta lnea no sirve para nada, al menos desde el punto de vista del
compilador, pero ayuda para separar visualmente la parte de declaracin de
variables de la parte de cdigo que va a continuacin. Se trata de una divisin
arbitraria. Desde el punto de vista del compilador, tanto las declaraciones de
variables como el cdigo son sentencias vlidas. La separacin nos ayudar a
distinguir visualmente dnde termina la declaracin de variables. Una labor
anloga la desempea el tabulado de las lneas: ayuda a hacer los programas ms
fciles de leer.
- Quinta lnea: "numero = 2 + 2;"
Se trata de otra sentencia, ya que acaba con punto y coma. Esta es una sentencia de
asignacin. Le asigna a la variable "numero" el valor resultante de evaluar la
expresin correspondiente a la operacin "2 + 2".
- Sexta lnea: "return 0;"
De nuevo una sentencia, "return" es una palabra reservada, propia de C++. Indica
al programa que debe abandonar la ejecucin de la funcin y continuar a partir del
punto en que se la llam. El 0 es el valor de retorno de nuestra funcin, recordemos
que la funcin "main" debe retornar un valor integer, entero. Por convenio, cuando
"main" retorna con 0 indica que todo ha ido bien. Un valor distinto suele indicar un
error. Imagina que nuestro programa es llamado desde un fichero de comandos, un
fichero "bat" o un "script". El valor de retorno de nuestro programa se puede usar
para tomar decisiones dentro de ese fichero. Pero somos nosotros, los
programadores, los que decidiremos el significado de los valores de retorno.
- Sptima lnea: "}"
Esta es la llave que cierra el cuerpo o definicin de la funcin.
Lo malo de este programa, a pesar de sumar correctamente "2+2", es que
aparentemente no hace nada:
No acepta datos externos y no proporciona ninguna salida de ningn tipo. En
realidad es absolutamente intil, salvo para fines didcticos, que es para lo que fue
creado. De modo que no te preocupes si decides probarlo con un compilador y no
pasa nada, es normal. Paciencia, iremos poco a poco.
En los siguientes captulos veremos tres conceptos bsicos: variables, funciones y
operadores. Despus estaremos en disposicin de empezar a trabajar con ejemplos
ms interactivos.






Nota importante: C y C++ distinguen entre maysculas y minsculas, as que "int
numero;" es distinto de "int NUMERO;", y tambin de "INT numero;" o de "int
NuMeRo;.

8

2 Tipos de variables I
Conceptualmente, desde el punto de vista de un programador, una variable es una
entidad cuyo valor puede cambiar a lo largo de la ejecucin de un programa.
En el nivel ms bajo, una variable se almacena en la memoria del ordenador. Esa
memoria puede ser un conjunto de semiconductores dentro de un circuito
integrado, ciertos campos magnticos sobre una superficie de un disco, ciertas
polarizaciones en una memoria de ferrita, o cualquier cosa que an no se haya
inventado. Afortunadamente, no deberemos preocuparnos por esos detalles.
En un nivel ms lgico, una variable ocupa un
espacio de memoria reservado en el ordenador para
contener sus valores durante la ejecucin de un
programa. Cada variable debe pertenecer a un tipo
determinado, y ese tipo determina, por una parte, el
tamao del espacio de memoria ocupado por la
variable, y por otra, el modo en que se manipular
esa memoria por el ordenador.No olvides, si es que
ya lo sabas, que la informacin en el interior de la
memoria del ordenador se almacena siempre de
forma binaria, al menos a bajo nivel. El modo en
que se interpreta la informacin almacenada en la
memoria de un ordenador es, en cierto modo, arbitraria; es decir, el mismo valor
puede codificar una letra, un nmero, una instruccin de programa, etc. No hay
nada diferente en una posicin de memoria que contenga una instruccin de
programa o una letra de un texto; si observamos una posicin de memoria
cualquiera, no habr modo de saber qu significa el valor que contiene. Es mediante
el tipo como le decimos al compilador el modo en que debe interpretarse y
manipularse cierta informacin binaria almacenada en la memoria de un
ordenador.De momento slo veremos los tipos fundamentales, que
son: void, char, int, float y double, en C++ se incluye tambin el tipo bool.
Tambin existen ciertos modificadores, que permiten ajustar ligeramente ciertas
propiedades de cada tipo; los modificadores pueden
ser: short, long, signed y unsigned, y pueden combinarse algunos de ellos.
Tambin veremos en este captulo los tipos enumerados, enum.
Sobre la sintaxis
A partir de ahora mostraremos definiciones de la sintaxis para las diferentes
sentencias en C++.
Estas definiciones nos permiten conocer las diferentes opciones para cada tipo de
sentencia, las partes obligatorias, las opcionales, dnde colocar los identificadores,
etc.
En este curso las definiciones de sintaxis se escribirn usando un rectngulo verde.
Las partes opcionales se colocan entre corchetes [ ], los valores separados con |
indican que slo puede escogerse uno de esos valores. Los valores entre <> indican
que debe escribirse obligatoriamente un texto que se usar como el concepto que se
escribe en su interior.
Por ejemplo, veamos la siguiente sintaxis, que define una sentencia de declaracin
de variables de tipo char:
[signed|unsigned] char
<identificador>[,<identificador2>[,<identificador3>]...];

9

Significa que se puede usar signed o unsigned, o ninguna de las dos, ya que
ambas estn entre [ ], y separadas con un |.
El subrayado de signed indica que se trata de la opcin por defecto. En este caso, si
no se usa signed ni unsigned, el compilador elige la opcinsigned.
A continuacin de char, que debe aparecer de forma obligatoria, debe escribirse un
texto, que tiene ser una nica palabra que actuar comoidentificador o nombre de
la variable. Este identificador es el que usaremos para referirnos a la variable en el
programa. En un programa C++ siempre llamaremos a las cosas por su
nombre.Opcionalmente, podemos declarar ms variables del mismo tipo,
aadiendo ms identificadores separados con comas. Podemos aadir tantos
identificadores como queramos.
Para crear un identificador hay que tener en cuenta algunas reglas, ya que no es
posible usar cualquier cosa como identificador.
Slo se pueden usar letras (maysculas o minsculas), nmeros y
ciertos caracteres no alfanumricos, como el '_', pero nunca un punto,
coma, guin, comillas o smbolos matemticos o interrogaciones.
El primer carcter no puede ser un nmero.
C++ distingue entre maysculas y minsculas, de modo que los
identificadores numero y Numero son diferentes.
Finalmente, la declaracin termina con un punto y coma.
Las palabras en negrita son palabras reservadas de C++. Eso significa que son
palabras que no se pueden usar para otras cosas, concretamente, no se pueden usar
como identificadores en un programa C++. Es decir, estn reservadas para usarse
del modo en que se describe en la sintaxis, y no se pueden usar de otro modo.
Sern vlidos estos ejemplos:
signed char cuenta, cuenta2, total;
unsigned char letras;
char caracter, inicial, respuesta;
signed char _letra;
Tipos fundamentales
En C slo existen cinco tipos fundamentales y los tipos enumerados, C++ aade un
sptimo tipo, el bool, y el resto de los tipos son derivados de ellos. Los veremos uno
por uno, y veremos cmo les afectan cada uno de los modificadores.

Tipo "char" o carcter:
[signed|unsigned] char
<identificador>[,<identificador2>[,<identificador3>]...];
Es el tipo bsico alfanumrico, es decir que puede contener un carcter, un dgito
numrico o un signo de puntuacin. Desde el punto de vista del ordenador, todos
esos valores son caracteres. En C++ este tipo siempre contiene un nico carcter
del cdigo ASCII. El tamao de memoria es de 1 byte u octeto. Hay que notar
que en C un carcter es tratado en todo como un nmero, de hecho, habrs
observado que puede ser declarado con y sin signo. Si no se especifica el
modificador de signo, se asume que es con signo.

10

Nota: s que esto sorprende, inquieta y despista a muchos lectores, as que
probablemente necesite alguna explicacin ms detallada. De modo que he aadido
un pequeo apndice que explica cmo es posible que un nmero y una letra se
puedan representar con el mismo tipo: Apndice A.
Este tipo de variables es apto para almacenar nmeros pequeos, como los dedos
que tiene una persona, o letras, como la inicial de mi nombre de pila.
El tipo char es, adems, el nico que tiene un tamao conocido y constante. Para el
resto de los tipos fundamentales que veremos, el tamao depende de la
implementacin del compilador, que a su vez suele depender de la arquitectura del
procesador o del sistema operativo. Sin embargo el tipo char siempre ocupa un
byte, y por lo tanto, podemos acotar sus valores mximo y mnimo.
As, el tipo char con el modificador signed, puede tomar valores numricos entre -
128 y 127. Con el modifiador unsigned, el rango est entre 0 y 255.
El hecho de que se trate de un tipo numrico entero nos permite usar variables
de char para trabajar con valores pequeos, siempre que lo consideremos
necesario.El motivo por el que este tipo tambin puede contener un caracter es
porque existe una correspondencia entre nmeros y caracteres. Esa
correspondencia recibe el nombre de cdigo ASCII.Segn este cdigo, por ejemplo,
al nmero 65 le corresponde el carcter 'A' o al nmero 49 el '1'.El
cdigo ASCII primitivo usaba slo 7 bits, es decir, poda codificar 128 caracteres.
Esto era ms que suficiente para sus inventores, que no usaban acentos, ees,
cedillas, etc. El octavo bit se usaba como bit de paridad en transmisiones de datos,
para la deteccin de errores.
Despus, para internacionalizar el cdigo, se us el octavo bit en una
tabla ASCII extendida, que puede codificar 256 caracteres.
Pero como esto tambin es insuficiente, se han creado otras codificaciones de
caracteres multibyte, aunque esto queda fuera de las posibilidades de char.
Tipo "int" o entero:
[signed|unsigned] [short|long] int
<identificador>[,<identificador2>[,<identificador3>]...];
[signed|unsigned] long [int]
<identificador>[,<identificador2>[,<identificador3>]...];
[signed|unsigned] short [int]
<identificador>[,<identificador2>[,<identificador3>]...];
Las variables enteras almacenan nmeros enteros dentro de los lmites de cada uno
de sus tamaos. A su vez, esos tamaos dependen de la plataforma, del compilador,
y del nmero de bits que use por palabra de memoria: 8, 16, 32... No hay reglas fijas
para saber el tamao, y por lo tanto, el mayor nmero que podemos almacenar en
cada tipo entero: short int, int o long int; depende en gran medida del
compilador y del sistema operativo. Slo podemos estar seguros de que el tamao
de un short int es menor o igual que el de un int, y ste a su vez es menor o igual
que el de un long int. Veremos cmo averiguar estos valores cuando estudiemos
los operadores.
A cierto nivel, podemos considerar los tipos char, short int, int y long int como
tipos enteros diferentes. Pero esa diferencia consiste slo en el tamao del valor
mximo que pueden contener, y en el tamao que ocupan en memoria, claro.
Este tipo de variables es til para almacenar nmeros relativamente grandes, pero
sin decimales, por ejemplo el dinero que tienes en el banco, (salvo que seas Bill
Gates), o el nmero de lentejas que hay en un kilo de lentejas.

11