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
下可用。但是AFAIKCLOCKS_peru_____second
不合格,在一般情况下不能在\if
下使用。我的C99副本(我想在回答时它是我的源代码)说“扩展为一个常量表达式,类型为clock_t
”。我的C11副本省略了“常量”一词。无论它是否为常量,它仍然无法移植到预处理器表达式中(正如您在相关问题的答案中所述),因为它不一定是整数类型。@Michael Burr:是的,原始C99表示“常量”。在C99 TC2中,这个词已经不存在了。