有没有办法知道预处理器运行时time_t
的大小?
我想知道time_t
是int32_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
存在问题。除非我可以使用预处理器确定编译时的大小。
答案 0 :(得分:9)
没有标准宏来检测time_t
的大小,并且您无法在预处理期间计算类型的大小(因为在预处理期间不存在“类型”)。但是,您可以使用模板实现所需的结果:
#include <ctime>
#include <utility>
typedef std::conditional<
sizeof(time_t) == 8,
zint64_t,
zint32_t
>::type my_time_t;
请注意sizeof(time_t)
是实现定义的,可能不是四个或八个字节。您需要确保考虑到这一点,要么确保在所有目标平台上都是四个或八个字节,要么通过添加额外的逻辑来处理其他大小。