2

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

我想知道是否time_tint32_tint64_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在这一点上存在问题。除非我可以在编译时使用预处理器确定大小。

4

1 回答 1

10

没有标准的宏来检测 的大小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 个字节,或者通过添加额外的逻辑来处理其他大小。

于 2013-07-08T05:23:25.233 回答