estructura-codigo/C
Manuel Vergara 2e791df6da Add READMEs
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
2023-06-01 11:55:57 +02:00
..
README.md Add READMEs 2023-06-01 11:55:57 +02:00

Estructura Básica del Programa C

Sección Descripción
Documentación Suele ir al comienzo, aunque no en todos los códigos fuente se hace por malas prácticas. Pero debería describir qué es lo que hace ese código fuente e incluso tener información del programador, fecha de creación, etc. Esto se escribe en forma de comentarios. En el ejemplo anterior de código en C sería lo correspondiente a `/* Programa Hola Mundo */
Enlace En esta parte, que viene justo tras la documentación, se incluyen los archivos de cabecera o bibliotecas que se necesitan para el código fuente que se está escribiendo. De esta forma, cuando se compila o interpreta, se sabe que hay que agregar una copia de los archivos de encabezado también para que funcione el programa final. Dicho de otro modo, se han usado funciones que están descritas en esos archivos. Por tanto, para que se puedan ejecutar adecuadamente se necesita el código correspondiente. Es como usar bloques de construcción prefabricados, facilitando la labor del programador para que no tenga que escribir desde cero un código. Por ejemplo, printf es una función que imprime texto en pantalla, pero printf a su vez está definida y escrita con un código fuente que está presente en stdio.h, en este caso. Por eso verás la línea:
#include<stdio.h>
Definición En algunos casos, no en todos, se necesita también una directiva de preprocesador, que contiene constantes simbólicas. Por ejemplo: #define nos permite usar constantes en nuestro código. Reemplaza todas las constantes con su valor en el código. En el caso del ejemplo de Hola Mundo no es necesario y no está presente, pero en otros códigos sí que suele estar. Por ejemplo:
#define EDAD 8
#define PI 3.1415
En este caso, cada vez que el programador use EDAD a lo largo del código se interpretará como la constante con valor 8. En el segundo caso se define el valor constante del número PI.
Declaración global Incluye declaración de variables globales, declaraciones de funciones, variables globales estáticas y funciones. Esto tampoco está presente en el ejemplo de Hola Mundo, pero que también puede aparecer en otros casos. Por ejemplo:
#include <stdio.h>

int x = 5; // Variable global
int main() {

int y = 10; // Variable local
return 0;
}
Como puedes ver, x se define como una variable global, concretamente con el valor entero 5 en este caso.
Función principal Para cada programa en C, la ejecución comienza desde la función main(). Es obligatorio incluir una función main() en cada programa C. A veces la puedes ver como int main() o incluso como void main(), etc.

Esta función principal es como cualquier otra función, también toma argumentos y devuelve un valor. Indicará que ahí es donde el programa comienza a ejecutarse. Y cuando se devuelve algún valor de main(), se entregará al sistema operativo.

void main() indica que la función main() no devolverá ningún valor, pero int main() indica que main() puede devolver datos de tipo entero. Cuando nuestro programa es simple y no va a terminar antes de llegar a la última línea del código, o el código está libre de errores, entonces podemos usar void main(). Pero si queremos terminar el programa usando el método exit(), entonces tenemos que devolver algunos valores enteros (cero o distinto de cero). En esa situación, void main() no funcionará. Por lo tanto, es una buena práctica usar int main().

También habrás visto en algunos casos cosas como int main(int argc, char **argv) o similares. En este caso se agregan argumentos dentro de los paréntesis para pasarlos al momento de ejecución. Es decir, los argumentos que se usarán en la línea de comandos al ejecutar el programa, como los que usas con los comandos habituales. Por ejemplo:

#include <stdio.h> main(argc, argv)
int argc;
char *argv[];
{
if(argc!=2) { printf("Ha olvidado su nombre.\n");
exit(1);
}
printf("Hola %s", argv[1]);
}

Al compilar este código fuente y al ejecutarlo, lo que hará es devolver "Hola" seguido del nombre que uses tras el comando. Si lo compilamos como "name", en la CLI podemos usar el comando:

name Pepito

Y el resultado será que no devuelve el mensaje:

Hola Pepito

Al haberle pasado ese argumento...
Subprogramas Incluye todas las funciones definidas por el usuario. Puedes observar multitud de funciones muy diversas, según el propósito del programa. Y pueden estar desordenadas, sin seguir el orden lógico de ejecución. Además, nos podemos encontrar con uno o más bloques, cada uno con un propósito determinado.
Todo esto es opcional, ya que la única función obligatoria es main() en todo caso, que es la que indicará por dónde comenzar.