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

时间:2013-07-08 05:14:53

标签: c++ sizeof c-preprocessor

有没有办法知道预处理器运行时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存在问题。除非我可以使用预处理器确定编译时的大小。

1 个答案:

答案 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)是实现定义的,可能不是四个或八个字节。您需要确保考虑到这一点,要么确保在所有目标平台上都是四个或八个字节,要么通过添加额外的逻辑来处理其他大小。