C++ 每秒时钟的类型

C++ 每秒时钟的类型,c++,time,types,C++,Time,Types,每秒时钟通常表示为什么数据类型长无符号整数时钟?它是否因实施而异 我之所以这样问,是因为我在返回值中使用了CLOCKS\u PER\u secs,我想确保使用最合适的类型。CLOCKS\u PER\u secs是一个宏,通常扩展为文本 报告说: 在GNU系统中,时钟是 相当于long int和 每秒时钟数是一个整数值。 但在其他系统中,时钟和 宏时钟的类型为每秒 可以是整数或整数 浮点类型。铸造 处理器时间值加倍,如中所示 上面的示例确保 运算,如算术和 印刷工作正常,并且 无论发生什么情况,都

每秒时钟通常表示为什么数据类型<代码>长无符号整数<代码>时钟?它是否因实施而异


我之所以这样问,是因为我在返回值中使用了
CLOCKS\u PER\u secs
,我想确保使用最合适的类型。

CLOCKS\u PER\u secs
是一个宏,通常扩展为文本

报告说:

在GNU系统中,时钟是 相当于long int和 每秒时钟数是一个整数值。 但在其他系统中,时钟和 宏时钟的类型为每秒 可以是整数或整数 浮点类型。铸造 处理器时间值加倍,如中所示 上面的示例确保 运算,如算术和 印刷工作正常,并且 无论发生什么情况,都要始终如一 基本的表示是


C标准所承诺的是,
CLOCKS\u PER_secs
是一个常量表达式,类型为
clock\u t
,必须是算术类型(可以是整数或浮点类型)

(C99 7.23日期和时间

我认为
clock\u t
通常是一个
长的
,但我不会用我的生命打赌我是对的

我通常信任的Harbison&Steele(第三版)建议将
clock\u t
转换为
double
,以便在程序中使用,这样无论实际的
clock\u t
类型(18.1 clock,clock\u t,CLOCKS\u PER\u second,TIMES),代码都可以工作:

以下是
时钟
功能的工作原理 用于为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 );
#包括
时钟开始、结束、持续时间;
开始=时钟();
过程();
完成=时钟();
printf(“进程()用了%f秒执行”\n“,
((双倍)(完成-开始))/每秒时钟数;
注意如何将转换为类型
double
允许
时钟
每秒时钟
浮点或 完整的


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

CythyPrsiSSEC实际上是由POSIX指定为页眉的一部分。

也就是说,这是一个时钟

反过来说:

时间和时钟应为整数或 真正的浮动类型


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

现在我注意到,这与Tomalak在回答()C99中提到的glibc手册中的建议是一样的。这个问题是关于C++的,两者之间没有关系。我不知道C标准中的什么地方需要<代码> CcLysSpRiSSEC./COD>是一个常量表达式。C99将其称为“时钟类型的表达式”,似乎有意省略了“常数”一词。问题出现在不同的上下文中:如果
,那么
每秒时钟数是否应该在
下可用。该标准要求符合整型常量表达式条件的类对象宏在
#if
下可用。但是AFAIK
CLOCKS_peru_____second
不合格,在一般情况下不能在
\if
下使用。我的C99副本(我想在回答时它是我的源代码)说“扩展为一个常量表达式,类型为
clock_t
”。我的C11副本省略了“常量”一词。无论它是否为常量,它仍然无法移植到预处理器表达式中(正如您在相关问题的答案中所述),因为它不一定是整数类型。@Michael Burr:是的,原始C99表示“常量”。在C99 TC2中,这个词已经不存在了。