Anuncios Google

Estructuración de un programa

Tutoriales de Programaciones

Una de las mejores características que presenta C es su facilidad de ser estructurado para su facil comprensión: funciones, múltiples archivos, la facilidad de elegir cuándo una variable será reconocida en una función, todo el archivo, programa entero... Todo esto y más se explica en este tutorial, para que puedas estructurar correctamente tu programa, siendo así más legible para futuras consultas, y por supuesto, para aprender a programar ;)

Tipos de variables

Las variables pueden ser locales o globales. Unas de las pocas diferencias que existen entre ellas, es que las locales son accesibles únicamente desde una función y las externas desde todas las de el programa, además de que las globales son un buen método para transferir varios datos de una función a otra.

Cabe destacar que se pueden declarar dos variables, que una sea externa (es lo mismo que global) y otra local, con el mismo nombre. El único efecto que causa esto es que cuando se quiere utilizar una de las dos dentro de la función donde se haya definido la local, la global quedará inaccesible desde esta misma. A continuación un ejemplo:

#include <stdio.h>
 
int a = 3, b = 5;
 
int main(){
   int c, d;
   int suma(int d);
 
   printf("introduce un valor para d\n");
 
   scanf("%d", &d);
 
   c = suma(d);
 
   c += b;
 
   printf("\n");
   printf("%i", c);
 
   scanf("%i", a);
   return 0;
}
 
int suma(int b){
 
   a += b;
   return a;
}

Al acceder a suma, como un parámetro formal es b y este ya existe como externa, la global queda inaccesible desde dicha función. Prueba a compilarlo y ejecutarlo.

Hasta ahora, prácticamente todos los ejemplos traían unas variables, pero no nos habíamos centrado en ellas. Extisten 4 tipos de variables, que para definirse debe preceder a cada nombre de variable su abreviatura de tipo correspondiente:

  • Automáticas: Son las variabels por defecto que habíamos usado en la mayoría de nuestro ejemplos. Para definirlas no hace falta ponerlas ninguna etiqueta, pues se las asigna automáticamente. Su etiqueta es "auto". Cabe destacar que son variables locales, es decir, si pusiesemos una variable fuera de una función, sin ninguna etiqueta, no sería automática, sino externa (también llamadas globales). No conservan su valor si se rertorna el control a la parte llamante de una función (o lo que es lo mismo, en cuanto finaliza la función, se "borra").
  • Estáticas: Son variables locales a su función, pero que cuando se sale de esta, permanece con su valor cuando se la vuelve a acceder. Esto sirve para poder reacceder a la función con los valores anteriores. Su etiqueta correspondiente es "static" A continuación un ejemplo:

#include <stdio.h>
 
int main(){
   int numintro;
   int suma(int numintro);
 
   do{
   printf("Introduce un numero entero para sumarlo a sus anteriores. 0 para parar.\n");
   scanf("%d", &numintro);
 
   printf("\nLa suma es %i\n\n\n", suma(numintro));
   }while(numintro != 0);
 
   printf("\n\nADIOS");
   getchar();
   return 0;
}
 
int suma( int a){
   static b = 0;
 
   b += a;
 
   return b;
}

Se puede ver declarada la variable estática b, a la cual se vuelve a acceder cada llamada a la función, pero permanece con su valor anterior. Cabe destacar que el valor '0' solo se le es asignado en el momento de la definición, por lo que no se vuelve a poner a otra pasada. Compílalo para comprobar el funcionamiento e intenta experimentar un poco por tu cuenta. Cuando lo hayas entendido sigue con el tutorial.

  • Externas: Estas variables, son lo contrario de las automáticas. Es decir, son globales a todas las funciones que van despues de su definición. Como se dijo antes, las automáticas y estáticas tienen preferencia frente estas, por lo que dos variables con dos nombres iguales, pero una sea local y otra global, la global se ignorará en dicha función donde haya sido definida la local. Cabe destacar que su etiqueta es "extern", pero la gran mayoría de compiladores prohiben su utilización pues se diferencia por su ámbito. Un cambio en una variable externa será reconocido en todo su ámbito. Se debe diferenciar entre una variable externa a un archivo y una variable externa al programa entero. Esto se explica a continuación, al igual que porqué no se debe usar el indicador extern.
  • Registro: De momento, solo debes saber que existen. Esto se tratara (muy) posteriormente.

Programas distribuidos en múltiples archivos

Dividir un programa de C en diversos archivos es de lo más sencillo que existe. Recuerda los tipos de variables, pues nos serán útiles.

Para compilarlos debemos presionar F9 (OJO: En Dev-Cpp que es en lo que se basa este tutorial, adécuate a tu compilador) y
automáticamente (si lo hemos hecho todo bien) se compilará.

Un ato importante rerspecto a las librerías, es que debemos definirlas una vez en cada archivo necesario. Es decir, si la necesitamos en todos los archivos, la definimos en todos, si la necesitamos en 1 de dos archivos, la definimos solo en ese.

Este apartado lo dividiremos en 2 subsecciones en las que hablaremos de funciones y variables.

Funciones

En lo que respecta a las funciones, podemos hacer que cualquier función sea reconocida en cualquier parte de cualquier programa poniendo en la definición un "extern" y seguido el tipo, nombre y argumentos de función. La declaración se hará exactamente igual. A continuación expongo un ejemplo de una declaración de función:

extern tipo nombre(arg);

Sólo puede haber una funcion main, y desde ahí ir llamando al resto de funciones. Observemos el último ejemplo modificado para que se adapte a lo que buscamos:

//Primer archivo####
#include <stdio.h>
 
extern int suma(int numintro);
 
int main(){
   int numintro;
 
   do{
   printf("Introduce un numero entero para sumarlo a sus anteriores. 0 para parar.\n");
   scanf("%d", &numintro);
 
   printf("\nLa suma es %i\n\n\n", suma(numintro));
   }while(numintro != 0);
 
   printf("\n\nADIOS");
   getchar();
   return 0;
}
 
 
//Segundo archivo####
 
int suma( int a){
   static b = 0;
 
   b += a;
 
   return b;
}

El primer cambio que podemos apreciar es que ha desaparecido la declaración de dentro de main. El segundo, a cada declaración y definición de función les precede un extern con el fin que puedan ser globales a los dos archivos.

Variables

Recuerda las variables externas. Las variables externas son externas para todo, pero para poder utilizarlas en diferentes archivos, debemos declararlas. A continuación un ejemplo:

//Primer archivo
...
int a = 0, b = 0, c = 0;
float d = 0;
char e = 0;
...
 
//Segundo archivo
...
extern int a, b, c;
extern float d;
extern char e;
...

La primera diferencia a observar es que el extern de la definición ha desaparecido, pues las definiciones que por delante llevan extern se convierten en declaraciones directamente.

Para definir una variable externa, la definimos fuera de todas las funciones, y para declararla en un archivo, basta cin hacerlo exactamente igual que la definición, salvo que poner la etiqueta del extern.

 


Espero que después de este tutorial ya podáis empezar a crear vuestros propios programas de calidad. Recuerda, si tienes dudas sobre el tema, no dudes en preguntar (siempre que hayas buscado primero).

 

4.5
Tu voto: Ninguno Votos totales: 4.5 (48 votos)

Anuncios Google