使用预处理程序确定time_t的大小吗?

问题描述 投票:2回答:1

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

c++ sizeof c-preprocessor
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个字节,或者通过添加其他逻辑来处理其他大小。

© www.soinside.com 2019 - 2024. All rights reserved.