CLOCKS_PER_SEC的类型

时间:2011-05-25 18:23:48

标签: c++ time types

CLOCKS_PER_SEC通常表示的数据类型是什么? long unsigned intclock_t?它是否因实施而异?

我问,因为我在返回值中使用CLOCKS_PER_SEC,我想确保使用最合适的类型。

3 个答案:

答案 0 :(得分:7)

C标准所承诺的是CLOCKS_PER_SEC是一个类型clock_t的常量表达式,它必须是算术类型(可以是整数或浮点类型)。

(C99 7。12日期和时间<time.h>

我认为clock_t通常是long,但我不会打赌我的生活是对的。

我通常信赖的哈比森&amp; Steele(第3版)建议将clock_t转换为double以便在您的程序中使用,这样无论实际clock_t类型(18.1 CLOCK,CLOCK_T,CLOCKS_PER_SEC,TIMES)如何,您的代码都可以正常工作:< / p>

  

以下是clock函数的用法   用于计时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 );
     

注意投射到double类型的方式   允许clock_tCLOCKS_PER_SEC   浮点数或浮点数   是一体的。

您可能会考虑这是否适用于您的目的。

答案 1 :(得分:3)

CLOCKS_PER_SEC是一个宏,通常会扩展为文字。

glibc manual说:

  

在GNU系统中,clock_t是   相当于long int和   CLOCKS_PER_SEC是一个整数值。   但在其他系统中,clock_t和   宏CLOCKS_PER_SEC的类型   可以是整数或   浮点类型。铸件   处理器时间值加倍,如   上面的例子,确保   算术和算术等操作   印刷工作正常   一直无论如何   基本代表是。

答案 2 :(得分:1)

CLOCK_PER_SEC实际上由POSIX指定为time.h标题的一部分。

这表示它是sys/types.h所描述的clock_t。

反过来说:

  

time_t和clock_t应为整数或   实际浮动类型。

所以你可以在可移植代码中假设它是一些整数或浮点类型。如果您只需要声明一个变量来存储该值,请将其声明为“clock_t”。