Ver Mensaje Individual
  #9 (permalink)  
Antiguo 15/07/2003, 14:55
josemi
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 9 meses
Puntos: 16
Hola,

Hace siglos que no programo en C, pero creo tal como dice leonardop seguiria fallando ya que estas creando 3 veces las variables, uno para cada .obj generado. En tiempo de linkado de los 3 .obj, ya no se si dara error de que redecalaracion, o que cada funcion hara referencia a uno de los 3 juegos de variables. Todo sera cuestion de probarlo con el compilador. Declarando con extern las variables en el .h y luego eclarandolas normal (global) en principal.c no deberia haber problemas.

Otra cosa, ¿prueba.h se incluye en otro fichero? Supongo que en principal.c. Porque si no, podrias pasar de poner las declaraciones (¿o era definiciones?) de las funciones en el .h, porque en los otros .c no las necesitan.

Mira, despues de enseñar el lenjuage de programacion, lo primero que te dicen es que el goto es el demonio. Y lo segundo es que las variables globales son el diablo. Huye de ambos tan rapido como puedas, o te llevaran a los infiernos de codigos imposibles de depurar.

La forma "correcta" de este programa seria:
Código:
/* principal.c */

#include "prueba.h"

int
main (void)
{
       char nombre[40], edad[3];

	prueba(nombre);
	pruebb(edad);
	pruebc(nombre,edad);

	return 0;
}

/* fin principal.c */



/* pruebab.c */

#include "prueba.h"

void
pruebb (char * edad)
{
	printf ("\nDIGITE SU EDAD:");
	scanf ("%s", edad);
}

/* fin pruebab.c */



/* prueba.c */

#include "prueba.h"

void
prueba (char * nombre)
{
	printf ("\nDIGITE SU NOMBRE:");
	scanf ("%s" ,nombre);
}

/* fin prueba.c */



/* pruebac.c */

#include "prueba.h"

void
pruebc (char *nombre,char * edad)
{
	printf ("\nNOMBRE\t\t\tEDAD\n");
	printf ("%s\t\t\t%s", nombre, edad);
}

/* fin pruebac.c */



/* prueba.h */

#include <stdio.h>

void prueba (char * nombre);
void pruebb (char * edad);
void pruebc (char * nombre,char * edad);

/* fin prueba.h */
si es que mis olvidadas neuronas de C no se equivocan con los punteros.

Como ves, no hay variables globales, se pasa todo por parametros (habria que añadir const y demas). Solo creas unas variables, locales al main() (como debe ser). Acostumbrate a programar sin variables globales, seras mas feliz, aunque al principio te parezca mas "rollo" ir pasando las variables de funcion en funcion.

Sobre las "broma" de la patente, supongo que alo que el se referia (en broma) es que lo tenia registrado en la propiedad intelectual (totalmente licito y recomendable). Como bien comenta leonardop, las patentes del software son peligrosas para los programadores (pero muy lucrativas para el dueño de la patente). ¿Sabes que si tu ahora haces un programa que lee y crea ficheros gif comprimidos (el mas normal de los formatos GIF), debes pagar al dueño de la patente de los GIF (en concreto la patente sobre el algoritmo de encriptacion)? Por esa razon las librerias y programas opensource ya no soportan el formato gif.

Saludos.

PD: Voy a ver si saco el compilador y hago un par de pruebas, aunque parece que ya las haces tu kapachov, ¿verdad?
__________________
Josemi

Aprendiz de mucho, maestro de poco.