Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26

    [C][Ubuntu][Code::Blocks] Funzione clock_gettime()

    Ciao a tutti.
    Non riesco ad avviare la funzione clock_gettime(), di preciso il compilatore non avvia il programma e mi restituisce come errore "undefined reference to 'clock_gettime'".
    Prima di avviare il programma ho comunque effettuato la compilazione dei vari file.c e il link ai file.o del progetto attraverso il terminale (gcc -c file1.c file2.c filen.c; gcc -c prog.exe file1.o -lrt file2.o -lrt filen.o -lrt) creando di fatto un file.exe.
    Ma poi?
    Devo sostituirlo al precedente eseguibile già compilato?

    Non ho inserito il codice dato che per questo tipo di informazione credo non sia necessario,ma in caso contrario non esiterò a postarlo.

    In attesa di vostre illuminazioni...
    Grazie.

  2. #2
    Quell'errore generalmente indica l'assenza dell'header che definisce il prototipo della funzione, ossia time.h . Controlla che tu lo abbia incluso.
    Comunque puoi direttamente compilare e linkare i file senza fare step-per-step.
    codice:
    g++ file1.c file2.c file3.c -o nome_eseguibile

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26
    Grazie, effettivamente proprio questo mi creava qualche perplessità dato che time.h è presente in tutti i file...
    Ad ogni modo, ho provato con il tuo codice e mi da i seguenti errori:
    - "main deve ritornare un int", ma main è una void;
    - e mi dice che __fpurge, come per gli altri file, non sono dichiarati in questo campo("was not declared in this scope").

  4. #4
    "main deve ritornare un int", ma main è una void;
    Non avrai mica fatto il copia incolla dal dev-c++ al code::blocks???
    Comunque il compilatore dice che main(come da standard) deve restituire un int e non un void!
    forse c'è proprio bisogno del codice,ci sarà sicuramente un malposizionamento di qualche file header.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26
    No no,nessun copia incolla.
    Ora metto il codice.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26

    Codice

    Processo dove è presente clock_gettime
    codice:
     case 1: clock_gettime(CLOCK_REALTIME, &ts1); /* E' qui che si verifica l'errore! */
                        a=(short*)malloc(n_a*m_a*sizeof(short));
                        b=(short*)malloc(n_b*m_b*sizeof(short));
                        c=(short*)malloc(n_a*m_b*sizeof(short));
                        s_main(a,b,c,n_a,m_a,n_b,m_b);
                        clock_gettime(CLOCK_REALTIME, &ts2);
                        eTime0 = (double)(ts2.tv_sec - ts1.tv_sec);
                        eTime1 = (double)(ts2.tv_nsec - ts1.tv_nsec);
                        eTime = eTime0 + eTime1*1.0e-9;
                        printf("\ngettime(): \t\t\tElapsed Time = %e sec", eTime);
                        break;
    Main.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void main()
    {
        short *a,*b,*c,i,j,n_a,n_b,m_a,m_b,x;
        struct timespec ts1, ts2; double eTime, eTime0, eTime1;
    
        do
        {
            puts("Inserire numero di righe della matrice A:");
            scanf("%hd",&n_a);
            __fpurge(stdin);
            puts("Inserire numero di colonne della matrice A:");
            scanf("%hd",&m_a);
            __fpurge(stdin);
            puts("Inserire numero di righe della matrice B:");
            scanf("%hd",&n_b);
            __fpurge(stdin);
            puts("Inserire numero di colonne della matrice B:");
            printf("(Il numero di colonne della matrice B deve essere uguale al numero di righe della matrice A(%hd)):\n",n_a);
            scanf("%hd",&m_b);
            __fpurge(stdin);}while(n_a!=m_b);
    
        while(x!=3)
        {
            puts("1.Processo con malloc.");
            puts("2.Processo con calloc.");
            puts("3.Fine.");
            puts("Inserire scelta:");
            scanf("%hd",&x);
            __fpurge(stdin);
    
            switch(x)
            {
                case 1: clock_gettime(CLOCK_REALTIME, &ts1); /* E' qui che si verifica l'errore! */
                        a=(short*)malloc(n_a*m_a*sizeof(short));
                        b=(short*)malloc(n_b*m_b*sizeof(short));
                        c=(short*)malloc(n_a*m_b*sizeof(short));
                        s_main(a,b,c,n_a,m_a,n_b,m_b);
                        clock_gettime(CLOCK_REALTIME, &ts2);
                        eTime0 = (double)(ts2.tv_sec - ts1.tv_sec);
                        eTime1 = (double)(ts2.tv_nsec - ts1.tv_nsec);
                        eTime = eTime0 + eTime1*1.0e-9;
                        printf("\ngettime(): \t\t\tElapsed Time = %e sec", eTime);
                        break;
    
                case 2: clock_gettime(CLOCK_REALTIME, &ts1);
                        a=(short*)calloc(n_a*m_a,sizeof(short));
                        b=(short*)calloc(n_b*m_b,sizeof(short));
                        c=(short*)calloc(n_a*m_b,sizeof(short));
                        s_main(a,b,c,n_a,m_a,n_b,m_b);
                         clock_gettime(CLOCK_REALTIME, &ts2);
    eTime0 = (double)(ts2.tv_sec - ts1.tv_sec); // sec
    eTime1 = (double)(ts2.tv_nsec - ts1.tv_nsec); // nano sec
    eTime = eTime0 + eTime1*1.0e-9; // sec
    printf("\ngettime(): \t\t\tElapsed Time = %e sec", eTime);
                        break;
    
                case 3: puts("Uscita");
                        break;
    
                default:    puts("Inserire un valore tra 1 e 3.");
                            break;
            }
        }
    }
    s_main.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void s_main(short *a,short *b,short *c,short n_a,short m_a,short n_b,short m_b)
    {
                comp(n_a,m_a,a);
                comp(n_b,m_b,b);
    
                stamp(n_a,m_a,a,'A');
                stamp(n_b,m_b,b,'B');
    
                prod(n_a,m_a,n_b,m_b,a,b,c);
    
                stamp(n_a,m_b,c,'C');
    }
    comp.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void comp(short n_x,short m_x, short *x)
    {
        srand(time (NULL));
    
        short i,j;
    
        for(i=0;i<n_x;i++)
        for(j=0;j<m_x;j++)
        *(x+i*n_x+j)=rand()%10;
    }
    stamp.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void stamp(short n_x,short m_x,short *x,char y)
    {
        short i,j;
        printf("\n\nMatrice %c:\n",y);
    
        for(i=0;i<n_x;i++)
        {
            printf("\n");
            for(j=0;j<m_x;j++)
            printf("%hd ",*(x+i*n_x+j));
        }
    }
    prod.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void prod(short n_x,short m_x,short n_y,short m_y,short *a,short *b,short *c)
    {
        short i,j,k,x,sum;
    
        for (i=0;i<n_x;i++)
        for (j=0;j<m_y;j++)
        {
            sum=0;
            for (k=0;k<m_x;k++)
            {
                x=(*(a+(i*n_x)+k))*(*(b+k*n_y+j));
                sum=sum+x;
            }
            *(c+i*n_x+j)=sum;
        }
    }
    Grazie!

  7. #7
    Quote Originariamente inviata da darth89 Visualizza il messaggio
    Grazie, effettivamente proprio questo mi creava qualche perplessità dato che time.h è presente in tutti i file...
    Ad ogni modo, ho provato con il tuo codice e mi da i seguenti errori:
    - "main deve ritornare un int", ma main è una void;
    - e mi dice che __fpurge, come per gli altri file, non sono dichiarati in questo campo("was not declared in this scope").
    __fpurge? Usa fflush. NB: fflush(stdin) è comporta un undefined behavior.
    An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both the following definitions of main: int main()and int main(int argc, char* argv[])

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26
    Ho dovuto ripegare su __fpurge perchè fflush non mi pulisce lo stream input...

  9. #9
    Hai letto la mia risposta?
    Usa
    codice:
    while (getchar() != '\n');

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ne abbiamo parlato tante volte in questo forum ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.