使用预处理器确定time_t的大小

Determine the size of time_t with preprocessor?

本文关键字:time 预处理 处理器      更新时间:2023-10-16

有没有办法在预处理器运行时知道time_t的大小?

我想知道time_tint32_t还是int64_t,我想在Linux(POSIX)和Windows(如果可能的话,在Mac OS/X下)下工作。它希望早点开始,这样我就可以做这样的事情:

#if time_t == _32BIT
typedef zint32_t my_time_t;
#else
typedef zint64_t my_time_t;
#endif

我的zint32/64_t类型会自动初始化为零。这对大多数类型都很有效,但time_t在这一点上存在问题。除非我可以在编译时用预处理器确定大小。

没有标准宏来检测time_t的大小,并且在预处理期间无法计算类型的大小(因为在预处理过程中不存在"类型")。然而,你可以使用模板来实现你想要的结果:

#include <ctime>
#include <utility>
typedef std::conditional<
    sizeof(time_t) == 8,
    zint64_t,
    zint32_t
>::type my_time_t;

请注意,sizeof(time_t)是实现定义的,可能不是四个或八个字节。您需要确保考虑到这一点,要么确保在所有目标平台上都是4或8个字节,要么添加额外的逻辑来处理其他大小。