Ale*_*lke 2 c++ sizeof c-preprocessor
有没有办法知道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
Run Code Online (Sandbox Code Playgroud)
我的zint32/64_t类型会自动初始化为零.这适用于大多数类型,但time_t在这一点上它是有问题的.除非我可以使用预处理器确定编译时的大小.
Jam*_*lis 10
没有标准宏来检测大小time_t,并且您无法在预处理期间计算类型的大小(因为在预处理期间不存在"类型").但是,您可以使用模板实现所需的结果:
#include <ctime>
#include <utility>
typedef std::conditional<
sizeof(time_t) == 8,
zint64_t,
zint32_t
>::type my_time_t;
Run Code Online (Sandbox Code Playgroud)
请注意,这sizeof(time_t)是实现定义的,可能不是四个或八个字节.您需要确保通过确保在所有目标平台上它是四个或八个字节,或者通过添加额外的逻辑来处理其他大小来确定这一点.