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 ;)
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:
#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.
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.
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.
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).