有必要在为Windows和Linux编写的程序中处理长数据类型吗
Is it necessary to take care of long data type in program that is written for Windows and Linux?
根据64位系统中的cpp参考:
LLP64 or 4/4/8 (int and long are 32-bit, pointer is 64-bit)
Win64 API
LP64 or 4/8/8 (int is 32-bit, long and pointer are 64-bit)
Unix and Unix-like systems (Linux, Mac OS X)
那么,对于为Linux和Windows编写的代码,如何考虑长数据类型呢?
- 在C和C++中,在可移植代码中,您永远不知道像
int
或long int
这样的类型的确切大小。如果将代码移动到不同的编译器(或不同的机器,或不同的操作系统),某些类型的大小可能会发生变化。这不一定是个问题;事实上,这只是一个问题,如果你想让它成为一个问题。(所有这些一直都是这样,与某人对"LLP64"answers"LP64"体系结构族的定义无关。) - 在那些(希望是罕见的)情况下,当你需要一个确切大小的类型时,一个好的方法是使用
<cstdint>
中的int32_t
和uint64_t
(或C中的<stdint.h>
) - 但在大多数情况下,您确实不需要指定类型的确切大小。(有人说你需要指定每种类型的确切尺寸,但我的建议是忽略这些人。)
- 几乎唯一需要指定确切大小的时间是在尝试定义一个结构时,该结构可以以"二进制"方式读写,以符合某些外部强加的存储布局。但是,由于对齐、填充和字节顺序等问题,指定数据类型的确切大小通常是不够的。因此,最好还是编写显式序列化和反序列化代码(或者使用"文本"数据格式,如果可以的话)
- 我的底线是,我很少担心类型的确切大小
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 为什么我的 IExtractIcon 处理程序没有被调用?
- 在遍历处理程序的向量时注册和注销处理程序
- 有可能在信号处理程序中设置promise吗
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 在C++程序中使用的迭代器中未处理的异常
- 有关图像处理应用程序的硬件和软件安全性的建议
- 通过安装信号处理程序关闭多线程应用程序
- QDateTime::toString() 在退出处理程序中使用时失败
- 如何在 WindowProc 处理程序中区分箭头键和数字键盘?
- async_write完成处理程序最早何时完成?
- C++事件系统 - 多态事件和事件处理程序
- 使用信号处理程序处理从 FIFO 接收的数据
- 使用独立的 c++ 程序处理用 C 编写的字符设备驱动程序
- C 程序处理两个文件,而不是一个文件
- 是什么让这个程序处理缓慢?(C++)
- QT 中的应用程序>处理消息?
- MongoDB C++驱动程序处理副本集连接故障
- 使用 OpenCV 程序处理多页 PDF