You are on page 1of 7

Definicin de una funcin

Funciones
Waldo E. Valenzuela P.

waldovalenzuela@udec.cl

Las funciones en C desempean el papel de las subrutinas o procedimientos en otros lenguajes, esto es, permiten agrupar una serie de operaciones de tal manera que se puedan utilizar ms tarde sin tener que preocuparnos por cmo estn implementadas, simplemente sabiendo lo que harn.

2011 Waldo Valenzuela

2011 Waldo Valenzuela

Definicin de una funcin

Definicin de una funcin

En C la declaracin de una funcin tiene la siguiente estructura: tipo_devuelto nombre_funcion (argumentos);

Formato de la definicin
tipo nombre(parmetros formales) cuerpo

Y su definicin: tipo_devuelto nombre_funcion (argumentos) { sentencias; }

Definicin especifica el cdigo de la funcin Declaracin define el perfil de uso de la funcin

2011 Waldo Valenzuela

2011 Waldo Valenzuela

Elementos de la definicin de una funcin


Ejemplo

Tipo de la funcin Parmetros formales (Argumentos)


Funcin retorna el entero mayor entre a y b


int mayor(int a, int b) { return a > b ? a : b; } Tipo: retorna int Nombre: mayor Parmetros formales: 2 enteros, a y b Cuerpo: return a > b ? a : b; Retorna: mayor entero entre a y b

Tipo del argumento Nombre del argumento Variables locales Cdigo a ejecutar Generalmente es un bloque delimitado por { y }

Cuerpo

2011 Waldo Valenzuela

2011 Waldo Valenzuela

Otra Implementacin

Ejemplo: funcin sumaCubos()


int sumaCubos(int x, int n) { int i; int suma = 0; for (i = 1; i <= n; i++) { suma = suma + x*x*x; } return suma; }
7 2011 Waldo Valenzuela 8

Sin usar el operador condicional


int mayor(int a, int b) { if (a > b) return a; else return b; } Ambas funciones tendrn el mismo perfil de uso

Mismo tipo, nombre y argumentos

2011 Waldo Valenzuela

Funcin sumaCubos()

Ejemplo de uso
int i = 3, j = 2; int k = sumaCubos(i, j); x recibe el valor 3 n recibe el valor 2 lazo calcula 2x33 = 54 funcin retorna 54 Qu valor tienen ahora:
k i suma 54 3 no existe!

Tipo: retorna int Nombre: sumaCubos Parmetros formales: 2 enteros, x y n Variables locales:

Entero i (contador) Entero suma (acumula sumas) Tienen alcance slo dentro de la funcin Acumula la suma de n veces x al cubo

Retorna: valor final de suma

2011 Waldo Valenzuela

2011 Waldo Valenzuela

10

Tipo de una funcin

Comando return

Funciones pueden retornar valores punteros al terminar su ejecucin

Define el valor retornado por la funcin


return expresin;

Funciones void no retornan valores

Compilador detecta uso incorrecto de void Declaracin debe ir antes del uso

Valor retornado debe corresponder al tipo de la funcin

Si tipo no se declara, se asume int

Conversion entre tipos

No es necesario utilizar el valor retornado

Comando return puede ser utilizado en cualquier parte de la funcin Expresin suele ir entre parntesis

Pero no es necesario en ANSI C

2011 Waldo Valenzuela

11

2011 Waldo Valenzuela

12

Declaracin de funciones

Prototipos

Compilador revisa el cdigo y encuentra una funcin desconocida


Indica al compilador el tipo de la funcin y el tipo y nmero de los argumentos


float suma(float, float);

Supone que retorna int Supone que argumentos estn correctos

No tiene forma de verificar tipo y nmero de stos

Cmo decirle el perfil de uso de la funcin?

Llamado tambin declaracin de la funcin Ntese que:

El nombre de los argumentos no es necesario

Funcin debe ser declarada en un prototipo


Recomendable incluirlos!

Antes de su uso! Generalmente en un archivo aparte (.h)

Prototipo termina en ;

2011 Waldo Valenzuela

13

2011 Waldo Valenzuela

14

Ejemplo
/* Declaracion de funcion */ float suma(float, float); /* Uso de la funcion */ float c = suma(x, 4*h); /* Definicin de funcion */ float suma(float a, float b) { return a + b; }
2011 Waldo Valenzuela 15

Archivos de encabezado

Llamados tambin archivos de cabecera, header files o archivos .h

Separar declaraciones de definiciones

Contienen declaraciones de funciones para bibliotecas del sistema


<stdio.h>

Incluidos con directiva #include al comienzo del archivo


#include <stdio.h>

2011 Waldo Valenzuela

16

Archivos de encabezado

Archivos de encabezado

Prototipo de una librera


#ifndef _MILIBRERIA_H_ #define _MILIBRERIA_H_

Prototipos tienen alcance global Prototipos se escriben slo una vez

Cambiar el prototipo implica recompilar todos los archivos que usan las funciones

void funcion1(int algo);

#endif

Al incluir archivo de encabezado en archivo que contiene definicin, compilador puede verificar uso correcto de funcin

Tipo y nmero de argumentos, tipo de retorno

2011 Waldo Valenzuela

17

2011 Waldo Valenzuela

18

Ubicacin de archivos de encabezado

Bibliotecas del sistema

Bibliotecas del sistema


Indicados por < y > #include <stdio.h>

Cdigo de usuario usa funciones de bibliotecas del sistema


printf(), system(), scanf(), sqrt(), etc. Prototipos del sistema estn en directorio include estndar Cdigo de funciones del sistema est en una biblioteca de funciones

Directorio estndar

En CodeBlocks\MinGW\Include

Archivos del usuario


Indicados por y #include miarchivo.h

Archivo .a

Directorio actual
19

Directorio estndar: CodeBlocks\MinGW\Lib

2011 Waldo Valenzuela

2011 Waldo Valenzuela

20

Ejemplo
printf(%lf %d\n, pi(), pi()); float pi() { return 3.14; }

Nombres de funciones
void a() { int b; int *f(int *a, int b); } void b() { int f(int a, int *b); }

Error: Compilador cree que pi() retorna entero!


Impresin es 0.00000 4199171 Funcin pi() no ha sido declarada Compilador detecta inconsistencia y advierte del hecho
21

Existe Error?

Error: funciones tienen alcance de bloque


Conflicto entre int *f y int f, por que? Adems la funcin a:

No puede usar el nombre a o b para valores de argumentos, ya que estn usados como nombre de funcin.

2011 Waldo Valenzuela

2011 Waldo Valenzuela

22

Argumentos

Paso por valor


void intercambio (int x, int y) { int temp; temp = x; x = y; y = temp; }

Paso por valor

Funcin recibe una copia de los valores de los argumentos Funcin puede modificar copias sin alterar variables originales Funcin recibe direccin de los argumentos Modificaciones s afectan variables originales

Paso por referencia


Error: funcin intercambia copias de las variables

Valores de x e y afuera de funcin no cambian


24

2011 Waldo Valenzuela

23

2011 Waldo Valenzuela

Paso por referencia


void intercambio (int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; }

Funcin main()

Todas las funciones de C estn al mismo nivel


No es posible anidar funciones Todas las funciones tienen alcance global Es la primera funcin en ejecutarse Slo puede haber una por programa

main() es la nica funcin especial de C


Funcin recibe direcciones de variables

Usar operador &


intercambio(&a, &b);

2011 Waldo Valenzuela

25

2011 Waldo Valenzuela

26

Perfil de uso de main()

Argumentos a main()

Estndar define
int main(void), o int main(int argc, char *argv[])

Argumentos de lnea de comando del programa


nicos prototipos vlidos! main() debe retornar un entero

Valor es usado por el sistema operativo


int argc: nmero de argumentos del programa char *argv[]: puntero a un vector de cadenas de caracteres que contienen los argumentos Se estudiarn en detalle ms adelante

0, o constante EXIT_SUCCESS Constante EXIT_FAILURE

Incluir <stdlib.h>

2011 Waldo Valenzuela

27

2011 Waldo Valenzuela

28

You might also like