如果返回-1,是否修改了time()参数?

时间:2018-10-18 21:41:11

标签: c++

更新

是:错误时,参数time()和返回值均为-1。我在answer below中添加了GNU代码。

原始问题:

time()函数声明为:std::time_t time(std::time_t* arg);

如果arg返回time()-1是否会更新?

time_t arg = 42;
time_t result = time(&arg);

cout << "arg: " << arg << ", result: " << result << endl;

此返回arg: 42, result: -1arg: -1, result: -1吗?

https://en.cppreference.com/w/cpp/chrono/c/time状态:

  

返回编码为std::time_t对象的当前日历时间,并将其存储在arg指向的对象中,除非argnull指针。 / p>      

返回值:

     

当前日历时间成功编码为std::time_t对象,错误则编码为(std::time_t)(-1)。如果arg不是null,则返回值也存储在arg指向的对象中。

http://www.cplusplus.com/reference/ctime/time/状态:

  

获取当前日历时间作为time_t类型的值。

     

该函数返回该值,并且如果参数不是null指针,则该函数还将此值设置为arg所指向的对象。

     

返回值:

     

如果参数不是空指针,则返回值与参数计时器所指向的位置中存储的返回值相同。

     

如果该函数无法检索日历时间,则返回值-1。

如果要设置arg,无论函数是否返回-1,我是否应该跳过初始化变量?

time_t arg; // not initialized
time_t result = time(&arg);

2 个答案:

答案 0 :(得分:3)

在7.27.2.4/3中,C11标准(C ++标准指的是C库函数)表示:

  

time函数将实现的最佳近似值返回到当前值   日历时间。如果未设置日历时间,则返回值(time_t)(-1)   可用。 如果timer不是空指针,则还将返回值分配给它指向的对象。

因此,在您的代码中将始终写入arg的值,而无需初始化它。

请注意,最好是完全省略它并写上time_t result = time(NULL);

答案 1 :(得分:0)

参数在错误时返回-1

GNU time.c的定义如下:

/* Return the current time as a `time_t' and also put it in *T if T is
   not NULL.  Time is represented as seconds from Jan 1 00:00:00 1970.  */
time_t
time (time_t *t)
{
  struct timeval tv;
  time_t result;

  if (__gettimeofday (&tv, (struct timezone *) NULL))
    result = (time_t) -1;
  else
    result = (time_t) tv.tv_sec;

  if (t != NULL)
    *t = result;
  return result;
}