预处理器运行时是否有办法知道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
方面存在问题。除非我可以在编译时确定预处理器的大小。
没有标准宏来检测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个字节,或者通过添加其他逻辑来处理其他大小。