使用预处理器确定time_t的大小
Determine the size of time_t with 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
我的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个字节,要么添加额外的逻辑来处理其他大小。
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- Visual Studio C - 无法输出预处理文件
- 在海湾合作委员会中加快宏观预处理的任何方法
- Xmllint未设置,而在路径中找不到XMLLINT;跳过XML预处理
- 如何在预处理时读取文件