gpt4 book ai didi

c - 如何获取 time_t 的最小/最大值(如果类型未知)

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:32 30 4
gpt4 key购买 nike

当我运行 antiword 时,UBSAN 提示未定义的行为效用:

runtime error: left shift of 1 by 63 places cannot be represented in type 'time_t' (aka 'long')

错误是由下面的 TIME_T_MINTIME_T_MAX 宏触发的。

#if !defined(TIME_T_MIN)
#define TIME_T_MIN ((time_t)0 < (time_t)-1 ?\
(time_t)0 :\
(time_t)1 << (sizeof(time_t) * CHAR_BIT - 1))
#endif /* TIMER_T_MIN */

#if !defined(TIME_T_MAX)
#if defined(__TURBOC__) /* Turbo C chokes on the subtraction below */
#define TIME_T_MAX (LONG_MAX)
#else /* All others */
#define TIME_T_MAX (~(time_t)0 - TIME_T_MIN)
#endif /* __TURBOC__ */
#endif /* TIME_T_MAX */

我联系了反词作者,他建议我找到一种替代方法来导出 time_t 的最小/最大值。

如果您不确定底层类型是什么,计算 time_t 的最小/最大值的跨平台方法是什么?

最佳答案

C11 的 _Generic 宏允许返回整数类型的最小/最大值:

#  define variable_min_value(_var)          \
_Generic(_var, \
char: CHAR_MIN, \
unsigned char: (unsigned char)0, \
signed char: SCHAR_MIN, \
signed short: SHRT_MIN, \
unsigned short: (unsigned short)0, \
signed int: INT_MIN, \
unsigned int: 0u, \
signed long: LONG_MIN, \
unsigned long: 0ul, \
signed long long: LLONG_MIN, \
unsigned long long: 0ull)

#define TIME_T_MIN (variable_min_value((time_t)0))

参见 this library对于其他变体。

关于c - 如何获取 time_t 的最小/最大值(如果类型未知),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43681269/

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