Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Declaración de estructuras

Estas en el tema de Declaración de estructuras en el foro de C/C++ en Foros del Web. Buenas, estoy recién experimentando con C y quería ver si podía hacer un simple Profiler. Este es el código: Profiler.C Código PHP: #include <time.h> struct intervalo { ...
  #1 (permalink)  
Antiguo 06/11/2007, 21:43
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Declaración de estructuras

Buenas, estoy recién experimentando con C y quería ver si podía hacer un simple Profiler. Este es el código:

Profiler.C

Código PHP:

#include <time.h>

struct intervalo
{
  
clock_t comienzo;
  
clock_t final;
  
double tiempo;
  
char identificador[12];    
};

static 
clock_t comienzo;
static 
int intervalosEstablecidos 0;
extern struct intervalo intervalos[7];

extern void comenzar()
{
    
comienzo clock();
}

extern double finalizar()
{
    
clock_t final;
    
double tiempoEjecucion;
    
    final = 
clock();
    
    
tiempoEjecucion = (double)(final - comienzo) / (double)CLOCKS_PER_SEC;
    
    return 
tiempoEjecucion;
}

extern int comenzarIntervalo(char ident[])
{
    
struct intervalo nuevoIntervalo;
    
    
nuevoIntervalo.comienzo clock();
    
nuevoIntervalo.identificador ident//'Incompatible types in assigment'
        
    
intervalos[intervalosEstablecidos] = nuevoIntervalo;
    
intervalosEstablecidos++;
    
    return 
intervalosEstablecidos;
}

extern void finalizarIntervalo(int indiceIntervalo)
{
    
intervalos[indiceIntervalo].final = clock(); 
    
intervalos[indiceIntervalo].tiempo = (double)(intervalos[indiceIntervalo].final - intervalos[indiceIntervalo].comienzo) / (double) CLOCKS_PER_SEC;   

Profiler.h

Código PHP:
extern void comenzar();
extern double finalizar();
extern struct intervalo intervalos[];
extern int comenzarIntervalo(char ident[]);
extern void finalizarIntervalo(int indiceIntervalo); 
Main.c

Código PHP:
#include <stdio.h>
#include <stdlib.h>
#include "libMath.h"
#include "Profiler.h"

int main()
{
    
int iindice;
    
intervalo miIntervalo;     //'Intervalo undeclared'
    
    
comenzar();
       
    
0;
    
    
indice comenzarIntervalo(NULL);
    
    while ( 
<= 50000)
    {
        
factorial(i);
        if (
25000)
        {
            
finalizarIntervalo(indice);
        }
        
i++;       
    }
    
    
printf("Tiempo de ejecucion: %.2f segundos.\n"finalizar());
    
printf("Tiempo de ejecucion de intervalo: %.2f segundos.\n"intervalos[indice].tiempo);  //'Invalid use of undefined type struct intervalo' 
    
    
system("PAUSE");    
    return 
0;
    

En esas líneas me da error. El respectivo mensaje de error que me arroja mi entorno (Dev C++) es el que está al lado, remarcado en rojo.
No sé bien en donde puede estar el error. Si estoy declarando la estructura intervalo en el header y definiendola en el código fuente, ¿Por qué no la está reconociendo el archivo principal?. Espero que puedan ayudarme con esto. Gracias de antemano, por al menos haber leído este post.
Saludos a todos!.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 06/11/2007, 22:15
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Re: Declaración de estructuras

Pude solucionar al menos un error de los tres que tenía. Pude asignar el parámetro ident[] al array de la estructura intervalo con strcopy. Solo quedan dos!.
__________________
Add, never Remove
  #3 (permalink)  
Antiguo 06/11/2007, 22:42
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Re: Declaración de estructuras

Perdón por la desprolijidad. No pude solucionarlo de esa forma, el mensaje de error que obtengo es '[Linker error] undefined reference to strcopy'. Saludos.
__________________
Add, never Remove
  #4 (permalink)  
Antiguo 07/11/2007, 03:50
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Declaración de estructuras

Es strcpy.

Igual te recomiendo mirar algun tutorial o libro ya que estas escribiendo muchos modificadores redundantes y algunas cosas sin sentido.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 07/11/2007, 07:42
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Re: Declaración de estructuras

Gracias por tu respuesta. Podrías ser más específico cuando decís "algunas cosas sin sentido"??. Los modificadores ya estuve buscando algo, y estoy empezando a comprender mejor. Los 'extern' en este caso no serían necesarios. Gracias!.
__________________
Add, never Remove
  #6 (permalink)  
Antiguo 07/11/2007, 08:35
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Declaración de estructuras

Cita:
Iniciado por mariano_donati Ver Mensaje
Gracias por tu respuesta. Podrías ser más específico cuando decís "algunas cosas sin sentido"??. Los modificadores ya estuve buscando algo, y estoy empezando a comprender mejor. Los 'extern' en este caso no serían necesarios. Gracias!.
Exacto, me referia basicamente a extern y static, //'Intervalo undeclared', "libMath.h"?, system("PAUSE").
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 07/11/2007, 11:03
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Re: Declaración de estructuras

Lo de //'Intervalo undeclared' fue nomás para referenciar a quien lea el post, el error que me daba cuando ejecutaba esa línea de código. libMath.h, es un archivo de cabecera en donde tenía definidas algunas funciones matematicas como factorial, cubo, etc. pero luego comprendí que tampoco es necesario hacer un archivo de cabecera con las declaraciones de estas funciones, ya que están visibles desde el archivo fuente para el resto de la aplicación. Y system("PAUSE"), simplemente lo utilizo para que no se me salga la aplicación sin poder ver los resultados.
Gracias por tu ayuda Eternal Idol. Saludos!.
__________________
Add, never Remove
  #8 (permalink)  
Antiguo 07/11/2007, 11:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Declaración de estructuras

Ya veo, al no tener ese libmath.h no intente compilar.

La logica es que pongas tanto el include de time.h, como la estructura en profiler.h y lo incluyas tambien en profiler.c ademas de main.c

La estructura podes declarla asi mejor:

Código:
typedef struct _intervalo
{
 //campos
}intervalo, *pintervalo;

intervalo intervalos[7];
Y fijate que tal va.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 07/11/2007, 12:32
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Re: Declaración de estructuras

Ahí funciona!. Muchas gracias. Espero no abusar de tus conocimientos, ¿Qué diferencia hay entre declarar una estructura agregando además la palabra clave typedef?. Nuevamente gracias por ayudarme a sobrellevar esta pesada, pero grata tarea de aprender C.
__________________
Add, never Remove
  #10 (permalink)  
Antiguo 07/11/2007, 12:46
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Re: Declaración de estructuras

Pregunta dudas puntuales, no genéricas, por favor.

No es complicado buscar el significado de typedef en algún tutorial o referencia de C.
  #11 (permalink)  
Antiguo 07/11/2007, 12:50
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Declaración de estructuras

Facilidad de lectura y uso (asi es como se trabajan las estructruras en Microsoft por cierto):

http://es.wikipedia.org/wiki/Typedef
http://en.wikipedia.org/wiki/Typedef
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #12 (permalink)  
Antiguo 08/11/2007, 07:42
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Re: Declaración de estructuras

muy buena referencia. Me aclaró todo ya. Te agradezco.
__________________
Add, never Remove
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:02.