gpt4 book ai didi

c - 什么情况下time in time.h会失败?

转载 作者:行者123 更新时间:2023-12-01 08:53:33 26 4
gpt4 key购买 nike

头文件 time.h 中的 time 函数由 POSIX 定义以返回一个 time_t,显然,它可以是一个带符号的 int或某种 float 。

http://en.cppreference.com/w/c/chrono/time

然而,该函数在出错时返回 (time_t)(-1)

什么情况下time会失败?

根据签名,time_t time( time_t *arg ) 似乎该函数不应该分配,因此这是一个潜在的失败原因。

最佳答案

time() 函数实际上是由 ISO 定义的,POSIX 大部分都遵循它,除了它可能对行为和/或属性(例如八位字节)施加进一步的限制。

而且,由于 ISO C 标准没有指定 如何 time() 可能会失败(a),因此可能性列表是不限于任何方式:

  • 可能失败的一种方式是在嵌入式领域。您的 C 程序很可能在没有实时时钟或其他时钟硬件(甚至计数器)的设备上运行,在这种情况下,将没有时间可用。
  • 或者该函数可能会检测到时钟硬件,这些硬件不断地跳来跳去,因此不可靠。
  • 或者您可能在实时环境中运行,在该环境中访问时钟硬件非常耗时,因此,如果它检测到您过于频繁地这样做,它就会决定开始失败,这样您的代码就可以执行它应该做的事情打算做:-)

从字面上看,可能性是无限的,当然,我的意思是比喻意义上的“字面意思”,而不是字面上的意思:-)


POSIX 本身显式指出,如果它检测到值不适合time_t 变量,它将失败:

The time() function may fail if: [EOVERFLOW] The number of seconds since the Epoch will not fit in an object of type time_t.


而且,就您的评论而言:

Based on the signature, time_t time( time_t *arg ), it seems like the function shouldn't allocate.

你需要对此保持谨慎。标准未规定的任何内容都完全可以解释。例如,我可以设想一个奇怪的实现,它为 NTP 请求数据包分配空间以发送到 time.nist.somewhere.org 以确保所有时间都是最新的,即使 没有 一个 NTP 客户端 :-)


(a) 事实上,它甚至没有指定 time_t定义是什么,所以将它限制为一个是不明智的整数或浮点值,它可以是自大爆炸以来的两周数的字符串表示 :-) 它所需要的只是它可以被其他 time.h 函数使用并且它可以是失败时转换为 -1

POSIX 确实声明它表示秒数(ISO 没有)但没有对其施加其他限制。

关于c - 什么情况下time in time.h会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com