You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何将C++的time_t对象设为纪元时间?并实现带默认返回值的函数

实现带可选默认返回值的time_t获取函数

没问题,我来帮你实现这个满足需求的函数!咱们分C++和C两种场景来写,因为两者对默认参数的支持不一样:

C++版本(直接支持默认参数)

首先是最简洁的C++实现,利用语言本身的默认参数特性:

#include <time.h>

// 获取当前时间,出错时返回指定的默认值(默认返回(time_t)-1,和time()错误返回一致)
time_t get_current_time(time_t default_val = (time_t)-1) {
    time_t now = time(NULL);
    // 如果time()调用成功就返回当前时间,否则返回默认值
    return (now != (time_t)-1) ? now : default_val;
}

使用示例:

  • 场景1:使用默认的错误返回值(和原生time()行为一致)
time_t current = get_current_time();
if (current == (time_t)-1) {
    // 这里处理获取时间失败的逻辑
    printf("Failed to get current time!\n");
}
  • 场景2:自定义错误时的返回值(比如传入0)
// 出错时返回0作为默认值
time_t current = get_current_time(0);
// 此时如果current是0,说明获取时间失败

C版本(用宏模拟默认参数)

因为标准C不支持函数默认参数,咱们可以用宏来模拟这个行为,保持调用的简洁性:

#include <time.h>
#include <stdio.h>

// 基础函数:接收自定义默认值
time_t get_current_time_with_default(time_t default_val) {
    time_t now = time(NULL);
    return (now != (time_t)-1) ? now : default_val;
}

// 宏封装,模拟默认参数(默认返回(time_t)-1)
#define get_current_time() get_current_time_with_default((time_t)-1)

使用示例:

  • 场景1:使用默认返回值
time_t current = get_current_time();
if (current == (time_t)-1) {
    printf("Failed to get current time!\n");
}
  • 场景2:使用自定义默认值
time_t current = get_current_time_with_default(0);

补充说明

  • 原生time(NULL)出错时会返回(time_t)-1,所以我们把默认参数设成这个值,保持和原生函数的错误语义一致,调用者更容易理解。
  • 如果你的场景需要特殊的默认值(比如某个固定时间点的time_t值),直接传入即可。

内容的提问来源于stack exchange,提问作者BuvinJ

火山引擎 最新活动