Cuando tenemos proyectos grandes cada uno de los archivos *.c tienen un objetivo definido y lo llevan a cabo implementando funciones.
Las funciones que implementa un archivo *.c son accedidas desde otros archivos.
Cuando queremos implementar funciones que solo puedan ser llamadas desde funciones del mismo archivo debemos anteceder el modificador static previo al nombre de la función.
Una función static se oculta al resto de archivos del proyecto, con esto logramos encapsular funcionalidades dentro de un archivo.
El modificador static aplicada a una variable global definida en el archivo también solo puede ser accedida por las funciones de ese archivo.
Problema 1:
Se tiene la siguiente declaración:
typedef struct {
int codigo;
char descripcion[41];
float precio;
} tproducto;
Definir un vector de 4 elementos de tipo tproducto.
Implementar una aplicación que muestre un menú de opciones que permita::
- Carga del vector.
- Impresión del vector.
- Finalizar
Mostrar un título y una línea final de asteriscos cuando se carga e imprima el vector.
Crearemos un proyecto en Code::Blocks dando los pasos similares al concepto anterior y lo llamaremos: proyecto002
Los contenidos de los tres archivos del proyecto son:
Archivo: productos.h
Archivo: productos.c
En este archivo tenemos los cambios con respecto al problema anterior.
Las funciones mostrarTitulo y mostrarAsteriscos queremos que solo puedan ser llamadas desde otras funciones del mismo archivo productos.c, para esto le agregamos el modificador static:
static void mostrarTitulo(char *tit)
{
printf("%s\n",tit);
}
static void mostrarAsteriscos()
{
printf("********************************************\n\n");
}
Deben estar declaradas en forma previa a cuando son llamadas.
Archivo: main.c
En el archivo main.c no podemos llamar a las funciones mostrarTitulo y mostrarAsteriscos.
Si intentamos llamarlas:
int main()
{
tproducto productos[CANT];
int opcion;
mostrarAsteriscos(); //error
do {
printf("1-Carga de productos.\n");
Aparecerá un error sintáctico en pantalla.
Si consultamos el código fuente del sistema operativo Linux en muchos de sus archivos encontraremos definiciones de funciones de tipo static:
No hay comentarios:
Publicar un comentario