wszystkim, że C standardowe obiecuje że CLOCKS_PER_SEC
jest stała ekspresja z typem clock_t
które muszą być typu arytmetyczna (może być liczbą całkowitą lub typu pływającego).
(C99 7.23 Data i czas <time.h>
)
myślę że clock_t
jest zwykle long
, ale nie postawić swoje życie, że mam rację.
My zwykle wierny Harbison & Steele (3rd ed) sugeruje odlewania clock_t
do double
do stosowania w swoich programach więc kod może działać niezależnie od rzeczywistej clock_t
typu (18.1 ZEGAR, clock_t, CLOCKS_PER_SEC czasy):
Oto jak funkcja clock
może być stosowane do czasu program ANSI C:
#include <time.h>
clock_t start, finish, duration;
start = clock();
process();
finish = clock();
printf("process() took %f seconds to execute\n",
((double) (finish - start))/CLOCKS_PER_SEC);
Uwaga jak obsada wpisać double
zezwala na clock_t
i CLOCKS_PER_SEC
na wartość zmiennopozycyjną lub całkę .
Możesz zastanowić się, czy to zadziała dla twoich celów.
A teraz zauważam, że jest to ta sama rada z podręcznika glibc, o której wspomina Tomalak w swojej odpowiedzi (http://stackoverflow.com/questions/6129029/type-clocks-per-sec/6129078#6129078) –
C99 nie jest istotne. To pytanie dotyczy C++ i nie ma między nimi związku. –
Nie widzę gdzie w standardzie C wymaga 'CLOCKS_PER_SEC' do wyrażenia * stałej *. C99 określa ją jako "wyrażenie typu clock_t", pozornie celowo pomijając termin "stała". Sprawa pojawiła się w innym kontekście: czy 'CLOCKS_PER_SEC' powinien być użyteczny w' # if'. Standard wymaga makr podobnych do obiektów, które kwalifikują się jako wyrażenia stałe liczb całkowitych do użycia w '# if'. Ale AFAIK 'CLOCKS_PER_SEC' nie kwalifikuje się i nie może być użyty w" # if "w ogólnym przypadku. – AnT