CLOCKS_PER_SEC通常表示的数据类型是什么? long unsigned int
? clock_t
?它是否因实施而异?
我问,因为我在返回值中使用CLOCKS_PER_SEC
,我想确保使用最合适的类型。
答案 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_t
和CLOCKS_PER_SEC
浮点数或浮点数 是一体的。
您可能会考虑这是否适用于您的目的。
答案 1 :(得分:3)
CLOCKS_PER_SEC
是一个宏,通常会扩展为文字。
在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”。