[C con Clase] Programación modular.

Steven Davidson srd4121 en njit.edu
Mie Mayo 19 09:04:35 CEST 2010


Hola Jorge,

2010/5/18 Jorge Vega Sanchez <memmaker650 en gmail.com>

> Buenas
>
> Llevo unos días trabajando con un programa  que ya funciona y estoy
> probando a distribuirlo en varios ficheros porque veo el código muy
> desordenado. Quiero distribuir el código en varios ficheros para tenerlo más
> ordenado y que sea más fácil ampliar el código y que sea legible. El
> problema viene en que ando muy perdido en esto porque no encuentro
> documentación y estoy probando alguna cosa que he visto pero no cumple todo
> lo que quiero. Y no sé como enlazarlo todo.
>
> Mi programa tiene: variables globales, 4 procediemientos generales y 2
> procedimientos de control y un programa principal.
>
> Me gustaría dividirlo en uno/dos ficheros de cabecera y 3 ficheros fuente.
> 1 donde este el main, otro donde esten los procedimientos de control y otro
> donde estén los procedimientos generales. En la cabecera incluyo una
> librería externa.
>
>
>

Sin conocer los detalles ni el problema exacto, no podemos ser muy precisos
en nuestra respuesta. Aparte de la ordenación del código, la separación del
código en diferentes ficheros ofrece también una oportunidad para agrupar y
relacionar el código lógicamente.

A mi parecer, el mayor problema que puedas tener es con las variables
globales. Defínelas en un fichero fuente, pero decláralas en los demás donde
las vayas a usar. Esto implica que deberás usar 'extern' a la hora de
declarar las variables globales que necesitas, pero sin (re)definirlas. Por
ejemplo,

// codigo01.h

extern int g_num;
extern float g_real;


// codigo01.cpp

int g_num = 10;
float g_real = -.5009;


// codigo02.h

#include "codigo01.h"

struct punto4d { double x,y,z,w; };

extern punto4d g_origen;


// codigo02.cpp

punto4d g_origen = { 0.0, 0.0, 0.0, 1.0 };


// main.cpp

#include "codigo01.h"
#include "codigo02.h"

int main()
{
  punto4d p;

  p.x = g_origen.x * g_num + g_real;
  p.y = g_origen.x * g_num + g_real;
  p.z = g_origen.x * g_num + g_real;
  p.w = g_origen.x;
  ...
  return 0;
}



Espero que esto te oriente.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100519/4778a637/attachment.html>


Más información sobre la lista de distribución Cconclase