FUNCIONES

DEFINICION

En C una función es una subroutina que contiene una o más instrucciones y que efectúa una o más operaciones. Las funciones están constituidas por un nombre y una lista de argumentos. En general es posible asignar a una función cualquier nombre excepto main, que está reservado a la función que inicia la ejecución del programa. Dentro de una función no se puede definir ninguna otra.

tipo_f es opcional e indica el tipo de valor que la función retorna con la instrucción return. Si se omite el tipo la función da un valor de tipo entero. declaración_parametros es una lista de variables con sus tipos donde cada par (tipo y variable) va separado por comas. Estas variables contienen el valor de los argumentos cuando se llama a la función

 

  • m_f(int x, int y, float z, char *pc)

Como se ve todas las variables van acompañadas de su tipo correspondiente.

LA INSTRUCCIÓN RETURN

La instrucción return tiene dos objetivos precisos. Primero permite terminar anticipadamente la ejecución de una función y segundo pasa un valor a la función que la llama.

 

  • void positivo(int n)
    {

  • if(n<0)return;/* Salida sin retorno de valor*/
    printf("\n numero = %d",n);
    }

 

PROTOTIPO DE FUNCIÓN

Antes de poder ser llamada una función el compilador tiene que conocer un prototipo de la misma. Esto se consigue definiendo (es decir programando) la función en un lugar del código fuente que venga antes del que contiene a la función que la llama o declarando al inicio del programa un prototipo que dice el nombre y la forma que ha de tener la misma.
Con el prototipo se consiguen dos objetivos. El primero el de indicar el tipo valor que retorna la función y el segundo es el de especificar el número de parámetros y el tipo de los mismos.

Generalmente el prototipo que se encuentra antes de cualquier llamada a la función va puesto en la parte superior del programa o en un archivo de cabecera (#include <archivo.h>).

 

  • #include <stdio.h>

    double power(double base, int exp); /* declaración del prototipo */

    main()
    {

  • double b,p;
    int e;
    printf("\n b e ? ");
    scanf("%lf%d",&b,&e);

    p=power(b,e);/* llamada a la función power que retorna un valor a p */

    printf("\n %8.6f elevado a %3d = %8.6f",b,e,p);
    return 0;
    }



double power(double base, int exp)

  • {
    double r=1;
    int i;
    if(exp<0)for(i=exp;i<0;i++)r=r/base;
    else for(i=0;i<exp;i++)r=base*r;
    return r; /* pasa el valor de r a la función que llama a power */
  • }

 

El prototipo informa al compilador que power retorna un valor de coma flotante de doble precisión y que el número de parámetros son tres.

FUNCIONES DE TIPO VOID

Una función que no retorna valor alguno se declara como de tipo void. De esta forma se impide que la función pueda ser utilizada en una expresión.

 

  • #include <stdio.h>
    void vertical(char *s);
    void main()
    {

  • vertical("Salida verticale");
    }



void vertical(char *s)

  • {
    int i=0;
    while(s[i]!='\0')
    {

  • printf("\n %c",s[i]);
    i++;
    }
  • }
 

 

Las funciones Main y vertical están declaradas como void.

PROTOTIPO DE FUNCIONES SIN PARÁMETROS

El standard ANSI del lenguaje C establece que cuando un prototipo de función no include parámetros la función puede ser llamada con cualquier número y cualquier tipo de ellos. Si se quiere señalar explícitamente que la función no tiene parámetros se debe especificar con void en la lista de los mismos.

 

  • #include <stdio.h>

    void output_casa(void);
    void main()
    {

  • output_casa();
    }

 

El prototipo de output_casa informa explícitamente al compilador que tal función no lleva argumentos. De esta forma una llamada a la función como:
output_casa("casa");
origina un error. Si por el contrario no se hubiese definido con void la llamada sería correcta.

VARIABLES LOCALES

En C cada función constituye un bloque de código por sí mismo cuyas instrucciones están reservadas a la función que las contiene y ninguna otra función tiene acceso a ellas si no es a través de una llamada de función.
Variables locales son aquellas que solo pueden ser utilizadas por la función que las contiene o para ser más precisos por el bloque que las contiene. A este respecto es importante señalar que dichas variables solo tienen vida mientras se ejecuta el bloque de programa donde han sido declaradas desapareciendo cuando se sale de dicho bloque dejando así el espacio de memoria que ocupaban a otras variables locales de otros bloques del programa.

 

  • void func1(void)
    {

  • int x=10;
    printf("func1: x=%d",x);
    }

 

  • void func2(void)
    {


  • int x;
    x=-1;

printf("func2: x=%d",x);
}

 

La x en func1() no tiene ninguna relación con la x en func2();

PARÁMETROS FORMALES

Como es notorio, si en una función se preve el uso de argumentos es necesario declarar variables que reciban los valores de tales argumentos. Se trata de los llamados parámetros formales que nos indican la forma (número de ellos y tipo) de los argumentos (valores o expresiones) que se pasan a la función a través de la lista de parámetros. Las variables que constituyen la lista de parámetros actúan como cualquier variable local interna en la función.
Es oportuno asegurarse que los parámetros formales declarados son del mismo tipo que los utilizados para llamar la función.

VARIABLES GLOBALES

Las variables globales están a disposición de cualquier instrucción del programa, independientemente de la función donde se encuentre. Su campo de visibilidad abarca todo el ámbito del programa.
Las variables globales se declaran fuera de cualquier función, normalmente al inicio del programa.

 

  • #include <stdio.h>
    int counter;
    void func1(void);
    void func2(void);
    void main()
    {

  • counter=10;
    func1();
  • }

 

  • void func1(void)
    {

  • func2();
    printf("\n counter global = %d",counter);
  • }

 

  • void func2(void)
    {

  • int counter;
    printf("\n");
    for (counter=1;counter<80;counter++)printf(".");
  • }

 

Si bien ni en main() ni en func1() ha sido declarada la variable counter, las dos la pueden utilizar. func2() sin embargo ha declarado una variable local counter. Cualquier referencia a counter en la función func2() se atribuye a la variable local counter y no a la global.
Las variables globales son útiles cuando se utilizan los mismos datos en muchas funciones. Sin embargo es mejor evitarlas pues quitan flexibilidad al programa.