Está en la página 1de 4

1.1.

3 IDENTIFICADORES
Como se ha dicho, la memoria de un computador consta de un conjunto enorme de pa
labras, en el que se almacenan datos y programas. Las necesidades de memoria de
cada tipo de dato no son homogneas (por ejemplo, un carcter alfanumrico ocupa un by
te, mientras que un nmero real con 16 cifras ocupa 8 bytes), y tampoco lo son las
de los programas. Adems, el uso de la memoria cambia a lo largo del tiempo dentr
o incluso de una misma sesin de trabajo, ya que el sistema reserva o libera memor
ia a medida que la va necesitando.
Cada posicin de memoria puede identificarse mediante un nmero o una direccin, y ste
es el modo ms bsico de referirse a una determinada informacin. No es, sin embargo,
un sistema cmodo o prctico, por la nula relacin nemotcnica que una direccin de memori
a suele tener con el dato contenido, y porque como se ha dicho antes la direccin fsi
ca de un dato cambia de ejecucin a ejecucin, o incluso en el transcurso de una mis
ma ejecucin del programa. Lo mismo ocurre con partes concretas de un programa det
erminado.
Dadas las citadas dificultades para referirse a un dato por medio de su direccin
en memoria, se ha hecho habitual el uso de identificadores. Un identificador es
un nombre simblico que se refiere a un dato o programa determinado. Es muy fcil el
egir identificadores cuyo nombre guarde estrecha relacin con el sentido fsico, mat
emtico o real del dato que representan. As por ejemplo, es lgico utilizar un identi
ficador llamado salario_bruto para representar el coste anual de un empleado. El
usuario no tiene nunca que preocuparse de direcciones fsicas de memoria: el sist
ema se preocupa por l por medio de una tabla, en la que se relaciona cada identif
icador con el tipo de dato que representa y la posicin de memoria en la que est al
macenado.
El C, como todos los dems lenguajes de programacin, tiene sus propias reglas para
elegir los identificadores. Los usuarios pueden elegir con gran libertad los nom
bres de sus variables y programas, teniendo siempre cuidado de respetar las regl
as del lenguaje y de no
Resumen de lenguaje ANSI C Pgina 4
utilizar un conjunto de palabras reservadas (keywords), que son utilizadas por e
l propio lenguaje. Ms adelante se explicarn las reglas para elegir nombres y cules
son las palabras reservadas del lenguaje C. Baste decir por ahora que todos los
identificadores que se utilicen han de ser declarados por el usuario, es decir,
hay que indicar explcitamente qu nombres se van a utilizar en el programa para dat
os y funciones, y qu tipo de dato va a representar cada uno de ellos. Ms adelante
se volver sobre estos conceptos.
1.2 Concepto de "programa"
Un programa en sentido informtico est constituido por un conjunto de instrucciones q
ue se ejecutan ordinariamente de modo secuencial, es decir, cada una a continuacin
de la anterior. Recientemente, con objeto de disminuir los tiempos de ejecucin de
programas crticos por su tamao o complejidad, se est haciendo un gran esfuerzo en
desarrollar programas paralelos, esto es, programas que se pueden ejecutar simul
tneamente en varios procesadores. La programacin paralela es mucho ms complicada qu
e la secuencial y no se har referencia a ella en este curso.
Anlogamente a los datos que maneja, las instrucciones que un procesador digital e
s capaz de entender estn constituidas por conjuntos de unos y ceros. A esto se ll
ama lenguaje de mquina o binario, y es muy difcil de manejar. Por ello, desde casi
los primeros aos de los ordenadores, se comenzaron a desarrollar los llamados le
nguajes de alto nivel (tales como el Fortran, el Cobol, etc.), que estn mucho ms c
erca del lenguaje natural. Estos lenguajes estn basados en el uso de identificado
res, tanto para los datos como para las componentes elementales del programa, qu
e en algunos lenguajes se llaman rutinas o procedimientos, y que en C se denomin
an funciones. Adems, cada lenguaje dispone de una sintaxis o conjunto de reglas c
on las que se indica de modo inequvoco las operaciones que se quiere realizar.
Los lenguajes de alto nivel son ms o menos comprensibles para el usuario, pero no
para el procesador. Para que ste pueda ejecutarlos es necesario traducirlos a su
propio lenguaje de mquina. Esta es una tarea que realiza un programa especial ll
amado compilador, que traduce el programa a lenguaje de mquina. Esta tarea se sue
le descomponer en dos etapas, que se pueden realizar juntas o por separado. El p

rograma de alto nivel se suele almacenar en uno o ms ficheros llamados ficheros f


uente, que en casi todos los sistemas operativos se caracterizan por una termina
cin tambin llamada extensin especial. As, todos los ficheros fuente de C deben termina
r por (.c); ejemplos de nombres de estos ficheros son calculos.c, derivada.c, et
c. La primera tarea del compilador es realizar una traduccin directa del programa
a un lenguaje ms prximo al del computador (llamado ensamblador), produciendo un f
ichero objeto con el mismo nombre que el fichero original, pero con la extensin (
.obj). En una segunda etapa se realiza el proceso de montaje (linkage) del progr
ama, consistente en producir un programa ejecutable en lenguaje de mquina, en el
que estn ya incorporados todos los otros mdulos que aporta el sistema sin interven
cin explcita del programador (funciones de librera, recursos del sistema operativo,
etc.). En un PC con sistema operativo Windows el programa ejecutable se guarda
en un fichero con extensin (*.exe). Este fichero es cargado por el sistema operat
ivo en la memoria RAM cuando el programa va a ser ejecutado.
Una de las ventajas ms importantes de los lenguajes de alto nivel es la portabili
dad de los ficheros fuente resultantes. Quiere esto decir que un programa desarr
ollado en un PC podr ser ejecutado en un Macintosh o en una mquina UNIX, con mnimas
modificaciones y una simple recompilacin. El lenguaje C, originalmente desarroll
ado por D. Ritchie en los laboratorios Bell de la AT&T, fue posteriormente estan
darizado por un comit del ANSI
1. INTRODUCCIN Pgina 5
(American National Standard Institute) con objeto de garantizar su portabilidad
entre distintos computadores, dando lugar al ANSI C, que es la variante que actu
almente se utiliza casi universalmente.
1.3 Concepto de "funcin"
1.3.1 CONCEPTOS GENERALES
Las aplicaciones informticas que habitualmente se utilizan, incluso a nivel de in
formtica personal, suelen contener decenas y an cientos de miles de lneas de cdigo f
uente. A medida que los programas se van desarrollando y aumentan de tamao, se co
nvertiran rpidamente en sistemas poco manejables si no fuera por la modularizacin,
que es el proceso consistente en dividir un programa muy grande en una serie de
mdulos mucho ms pequeos y manejables. A estos mdulos se les ha solido denominar de d
istintas formas (subprogramas, subrutinas, procedimientos, funciones, etc.) segn
los distintos lenguajes. El lenguaje C hace uso del concepto de funcin (function)
. Sea cual sea la nomenclatura, la idea es sin embargo siempre la misma: dividir
un programa grande en un conjunto de subprogramas o funciones ms pequeas que son
llamadas por el programa principal; stas a su vez llaman a otras funciones ms espe
cficas y as sucesivamente.
La divisin de un programa en unidades ms pequeas o funciones presenta entre otras las
ventajas siguientes:
1. Modularizacin. Cada funcin tiene una misin muy concreta, de modo que nunca tiene
un nmero de lneas excesivo y siempre se mantiene dentro de un tamao manejable. Ade
ms, una misma funcin (por ejemplo, un producto de matrices, una resolucin de un sis
tema de ecuaciones lineales, ...) puede ser llamada muchas veces en un mismo pro
grama, e incluso puede ser reutilizada por otros programas. Cada funcin puede ser
desarrollada y comprobada por separado.
2. Ahorro de memoria y tiempo de desarrollo. En la medida en que una misma funcin
es utilizada muchas veces, el nmero total de lneas de cdigo del programa disminuye
, y tambin lo hace la probabilidad de introducir errores en el programa.
3. Independencia de datos y ocultamiento de informacin. Una de las fuentes ms comu
nes de errores en los programas de computador son los efectos colaterales o pert
urbaciones que se pueden producir entre distintas partes del programa. Es muy fr
ecuente que al hacer una modificacin para aadir una funcionalidad o corregir un er
ror, se introduzcan nuevos errores en partes del programa que antes funcionaban
correctamente. Una funcin es capaz de mantener una gran independencia con el rest
o del programa, manteniendo sus propios datos y definiendo muy claramente la int
erfaz o comunicacin con la funcin que la ha llamado y con las funciones a las que
llama, y no teniendo ninguna posibilidad de acceso a la informacin que no le comp
ete.
Las funciones de C estn implementadas con un particular cuidado y riqueza, consti

tuyendo uno de los aspectos ms potentes del lenguaje. Es muy importante entender
bien su funcionamiento y sus posibilidades.
1.3.2 NOMBRE, VALOR DE RETORNO Y ARGUMENTOS DE UNA FUNCIN
Una funcin de C es una porcin de cdigo o programa que realiza una determinada tarea
. Una funcin est asociada con un identificador o nombre, que se utiliza para refer
irse a ella desde el resto del programa. En toda funcin utilizada en C hay que di
stinguir entre su
Resumen de lenguaje ANSI C Pgina 6
definicin, su declaracin y su llamada. Para explicar estos conceptos hay que intro
ducir los conceptos de valor de retorno y de argumentos.
Quizs lo mejor sea empezar por el concepto ms prximo al usuario, que es el concepto
de llamada. Las funciones en C se llaman incluyendo su nombre, seguido de los a
rgumentos, en una sentencia del programa principal o de otra funcin de rango supe
rior. Los argumentos son datos que se envan a la funcin incluyndolos entre parntesis
a continuacin del nombre, separados por comas. Por ejemplo, supngase una funcin ll
amada power que calcula x elevado a y. Una forma de llamar a esta funcin es escri
bir la siguiente sentencia (las sentencias de C terminan con punto y coma):
power(x,y);
En este ejemplo power es el nombre de la funcin, y x e y son los argumentos, que
en este caso constituyen los datos necesarios para calcular el resultado deseado
. Qu pasa con el resultado? Dnde aparece? Pues en el ejemplo anterior el resultado e
s el valor de retorno de la funcin, que est disponible pero no se utiliza. En efec
to, el resultado de la llamada a power est disponible, pues aparece sustituyendo
al nombre de la funcin en el mismo lugar donde se ha hecho la llamada; en el ejem
plo anterior, el resultado aparece, pero no se hace nada con l. A este mecanismo
de sustitucin de la llamada por el resultado es a lo que se llama valor de retorn
o. Otra forma de llamar a esta funcin utilizando el resultado podra ser la siguien
te:
distancia = power(x+3, y)*escala;
En este caso el primer argumento (x+3) es elevado al segundo argumento y, el res
ultado de la potencia el valor de retorno es multiplicado por escala, y este nuevo
resultado se almacena en la posicin de memoria asociada con el identificador dis
tancia. Este ejemplo resulta tpico de lo que es una instruccin o sentencia que inc
luye una llamada a una funcin en el lenguaje C.
Para poder llamar a una funcin es necesario que en algn otro lado, en el mismo o e
n algn otro fichero fuente, aparezca la definicin de dicha funcin, que en el ejempl
o anterior es la funcin power. La definicin de una funcin es ni ms ni menos que el c
onjunto de sentencias o instrucciones necesarias para que la funcin pueda realiza
r su tarea cuando sea llamada. En otras palabras, la definicin es el cdigo corresp
ondiente a la funcin. Adems del cdigo, la definicin de la funcin incluye la definicin
del tipo del valor de retorno y de cada uno de los argumentos. A continuacin se p
resenta un ejemplo incompleto de cmo podra ser la definicin de la funcin power utiliza
da en el ejemplo anterior.
double power(double base, double exponente) { double resultado;
... resultado = ... ; return resultado;
}
La primera lnea de la definicin es particularmente importante. La primera palabra
double indica el tipo del valor de retorno. Esto quiere decir que el resultado d
e la funcin ser un nmero de punto flotante con unas 16 cifras de precisin (as es el t
ipo double, como se ver ms adelante). Despus viene el nombre de la funcin seguido de
entre parntesis la definicin de los argumentos y de sus tipos respectivos. En este
caso hay dos argumentos, base y exponente, que son ambos de tipo double. A conti
nuacin se abren las llaves que
1. INTRODUCCIN Pgina 7
contienen el cdigo de la funcin1. La primera sentencia declara la variable resulta
do, que es tambin de tipo double. Despus vendran las sentencias necesarias para cal
cular resultado como base elevado a exponente. Finalmente, con la sentencia retu
rn se devuelve resultado al programa o funcin que ha llamado a power.
Conviene notar que las variables base y exponente han sido declaradas en la cabe
cera primera lnea de la definicin, y por tanto ya no hace falta declararlas despus,

como se ha hecho con resultado. Cuando la funcin es llamada, las variables base y
exponente reciben sendas copias de los valores del primer y segundo argumento q
ue siguen al nombre de la funcin en la llamada.
Una funcin debe ser tambin declarada antes de ser llamada. Adems de la llamada y la
definicin, est tambin la declaracin de la funcin. Ya se ver ms adelante dnde se pued
ealizar esta declaracin. La declaracin de una funcin se puede realizar por medio de
la primera lnea de la definicin, de la que pueden suprimirse los nombres de los a
rgumentos, pero no sus tipos; al final debe incluirse el punto y coma (;). Por e
jemplo, la funcin power se puede declarar en otra funcin que la va a llamar incluy
endo la lnea siguiente:
double power(double, double);
La declaracin de una funcin permite que el compilador chequee el nmero y tipo de lo
s argumentos, as como el tipo del valor de retorno. La declaracin de la funcin se c
onoce tambin con el nombre de prototipo de la funcin.

También podría gustarte