如何将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




