Ámbito de funciones en C (scope)

Author
Por Darío Rivera
Publicado el en Lenguaje C

En otro artículo similar hemos visto el ámbito de las funciones en C. Como complemento, también existe un ámbito para las funciones en C. En este artículo abordaremos todo acerca de este aspecto tan interesante en C. 

En C podemos clasificar las funciones como externas y estáticas. Las funciones externas son por naturaliza exportables, es decir, se puede usar en otros archivos. Las funciones estáticas solo se pueden usar en el archivo en el cual fueron declaradas.

Todas las funciones son de carácter global; esto es, una función no puede definirse dentro de un bloque.

Funciones externas (por defecto)

En C las funciones por defecto son globales y externas. Esto quiere decir que podemos utilizar funciones de otros archivos impotándolas a nuestro archivo principal. El modificar por defecto es extern.

main.c

#include <stdio.h>

void say_hello();

int main()
{
    say_hello();
    return 0;
}

funciones.c

#include <stdio.h>

extern void say_hello()
{
    printf("Hello!\n");
}

Al compilar este programa no se obtiene warnings ni errores.

gcc main.c funciones.c

Funciones estáticas

Al agregar el modificar static a una función esta será visible solamente en su propio archivo fuente. Si tomas el ejemplo anterior y cambias extern por static verás un error del compilador.

Por otro lado puedes sobreescribir una función externa en un archivo agregando el modificador static.

main.c

#include <stdio.h>

static void say_hello()
{
    printf("Hello local!\n");
}

int main()
{
    say_hello();
    return 0;
}

funciones.c

#include <stdio.h>

extern void say_hello()
{
    printf("Hello!\n");
}

Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.