clock() gibt immer 0 zurück



  • Hi(gh)!

    Laut diverser C/C++-Referenzen soll die Funktion clock() aus time.h die aktuelle Prozessorzeit seit Programmstart zurückgeben. Wenn ich aber folgendes Programm:

    #include <stdio.h>
    #include <time.h>
    
    int main()
    {
      unsigned long int i;
    
      printf("\nAktuelle Startzeit ist: %li.\n", clock());
      for (i=0; i < 3000000000; i++);
      printf("Laufzeit war %.3f", clock());
    
      printf("\n");
      return 0;
    }
    

    kompiliere und starte, bekomme ich immer nur folgende Ausgaben:

    Aktuelle Startzeit ist: 0.

    Laufzeit war 0.000

    Wieso?

    Bis bald im Khyberspace

    Yadgar

    Now playing: The Groover (T. Rex)



  • Der Formatspecifier bei printf muss zum Variablentyp passen.

    Du hast einmal %li und dann %.3f
    %li ist für long integer
    %f ist für float und double.

    Welchen Typ gibt denn clock() zurück?.

    Zudem kann dein Compiler die Leerschleife auch wegoptimieren, da dort sowieso nichts passiert.



  • Hi(gh)!

    DirkB schrieb:

    Der Formatspecifier bei printf muss zum Variablentyp passen.

    Du hast einmal %li und dann %.3f
    %li ist für long integer
    %f ist für float und double.

    Stimmt, jetzt sehe ich es auch...

    DirkB schrieb:

    Welchen Typ gibt denn clock() zurück?.

    clock_t, auf meinem System als long integer definiert!

    DirkB schrieb:

    Zudem kann dein Compiler die Leerschleife auch wegoptimieren, da dort sowieso nichts passiert.

    Nein, macht er nicht, ich habe durchaus eine Verzögerung von ungefähr 10 Sekunden...

    Hier die korrigierte Version:

    #include <stdio.h>
    #include <time.h>
    
    int main()
    {
      unsigned long int i;
    
      printf("\nAktuelle Startzeit ist: %li.\n", clock());
      for (i=0; i < 3000000000; i++);
      printf("Laufzeit war %.3f", (float)clock()/CLOCKS_PER_SEC);
    
      printf("\n");
      return 0;
    }
    

    Die Ausgabe:

    Aktuelle Startzeit ist: 0.

    Laufzeit war: 8.860

    Kommt hin! Danke für den Hinweis!

    Bis bald im Khyberspace!

    Yadgar

    Now playing: It Can Happen (Yes)


Anmelden zum Antworten