You are on page 1of 5

2.

DECLARACION DE FUNCIONES
Antes de escribir una funcin es necesario informarle al Compilador los
tamaos de los valores que se le enviarn en el stack y el tamao de los
valores que ella retornar al programa invocante .
Estas informaciones estn contenidas en la DECLARACION del PROTOTIPO
DE LA FUNCION.
Formalmente dicha declaracin queda dada por :
tipo del valor de retorno nombre_de_la_funcin(lista de tipos de
parmetros)
Pongamos algunos ejemplos :
float mi_funcion(int i, double j ) ;
double otra_funcion(void) ;
otra_mas(long p) ;
void la_ultima(long double z, char y, int x, unsigned long w) ;
El primer trmino del prototipo da, como hemos visto el tipo del dato
retornado por la funcin; en caso de obviarse el mismo se toma, por
omisin, el tipo int. Sin embargo, aunque la funcin devuelva este tipo de
dato, para evitar malas interpretaciones es conveniente explicitarlo .
Ya que el "default" del tipo de retorno es el int, debemos indicar cuando la
funcin NO retorna nada, esto se realiza por medio de la palabra VOID ( sin
valor).
De la misma manera se acta, cuando no se le enviarn argumentos.
Ms adelante se profundizar sobre el tema de los argumentos y sus
caractersticas.
La declaracin debe anteceder en el programa a la definicin de la funcin.
Es normal, por razones de legibilidad de la documentacin, encontrar todas
las declaraciones de las funciones usadas en el programa, en el HEADER del
mismo, junto con los include de los archivos *.h que tienen los prototipos de
las funciones de Librera.
Si una ms de nuestras funciones es usada habitualmente, podemos
disponer su prototipo en un archivo de texto, e incluirlo las veces que
necesitemos, segn se vio en captulos previos.
3. DEFINICION DE LAS FUNCIONES
La definicin de una funcin puede ubicarse en cualquier lugar del
programa, con slo dos restricciones: debe hallarse luego de dar su
prototipo, y no puede estar dentro de la definicin de otra funcin ( incluida

main() ). Es decir que a diferencia de Pascal, en C las definiciones no pueden


anidarse.
NOTA: no confundir definicin con llamada; una funcin puede llamar a
tantas otras como desee .
La definicin debe comenzar con un encabezamiento, que debe coincidir
totalmente con el prototipo declarado para la misma, y a continuacin del
mismo, encerradas por llaves se escribirn las sentencias que la componen;
por ejemplo:
#include
float mi_funcion(int i, double j ); /* DECLARACION observe que termina en
";" */
main()
{
float k ;
int p ;
double z ;
...........
k = mi_funcion( p, z );

/* LLAMADA a la funcin */

...........
}

/* fin de la funcin main() */

float mi_funcion(int i, double j ) /* DEFINICION observe que NO lleva ";" */


{
float n
...................

printf("%d", i );

/* LLAMADA a otra funcin */

...................
return ( 2 * n );

/* RETORNO devolviendo un valor float */

}
6. AMBITO DE LAS VARIABLES (SCOPE)
VARIABLES GLOBALES
Hasta ahora hemos diferenciado a las variable segun su "tipo" (int, char
double, etc), el cual se refera, en ltima instancia, a la cantidad de bytes
que la conformaban. Veremos ahora que hay otra diferenciacin de las
mismas, de acuerdo a la clase de memoria en la que residen .
Si definimos una variable AFUERA de cualquier funcin (incluyendo esto a
main() ), estaremos frente a lo denominado VARIABLE GLOBAL. Este tipo de
variable ser ubicada en el segmento de datos de la memoria utilizada por
el programa, y existir todo el tiempo que est ejecutandose este .
Este tipo de variables son automaticamente inicializadas a CERO cuando el
programa comienza a ejecutarse .
Son accesibles a todas las funciones que esten declaradas en el mismo, por
lo que cualquiera de ellas podr actuar sobre el valor de las mismas. Por
ejemplo :

#include
double una_funcion(void);
double variable_global ;
main()
{
double i ;
printf("%f", variable_global );

/* se imprimir 0 */

i = una_funcion() ;
printf("%f", i );

/* se imprimir 1 */

printf("%f", variable_global );

/* se imprimir 1 */

variable_global += 1 ;
printf("%f", variable_global );

/* se imprimir 2 */

return 0 ;
}
double una_funcion(void)
{
return( variable_global += 1) ;
}

Parmetros
Normalmente, las funciones operan sobre ciertos valores pasados a
las mismas ya sea como constantes literales o como variables,
aunque se pueden definir funciones que no reciban parmetros.
Existen dos formas en de pasar parmetros a una funcin; por
referencia o por valor. El hecho es que si en una declaracin de
funcin se declaran parmetros por referencia, a los mismos no se

les podr pasar valores literales ya que las referencias apuntan a


objetos (variables o funciones) residentes en la memoria; por otro
lado, si un parmetro es declarado para ser pasado por valor, el
mismo puede pasarse como una constante literal o como una
variable. Los parmetros pasados por referencia pueden ser
alterados por la funcin que los reciba, mientras que los parmetros
pasados por valor o copia no pueden ser alterados por la funcin
que los recibe, es decir, la funcin puede manipular a su antojo al
parmetro, pero ningn cambio hecho sobre este se reflejar en el
parmetro original.

Parmetros constantes
Los parmetros usados por una funcin pueden declararse como
constantes ( const ) al momento de la declaracin de la funcin. Un
parmetro que ha sido declarado como constante significa que la
funcin no podr cambiar el valor del mismo ( sin importar si dicho
parmetro se recibe por valor o por referencia ).

Parmetros con valor por defecto


Los parmetros usados por una funcin pueden declararse con un
valor por defecto. Un parmetro que ha sido declarado con valor por
defecto es opcional a la hora de hacer la llamada a la funcin

You might also like