有必要在为Windows和Linux编写的程序中处理长数据类型吗

Is it necessary to take care of long data type in program that is written for Windows and Linux?

本文关键字:程序 处理 数据类型 Windows Linux      更新时间:2023-10-16

根据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编写的代码,如何考虑长数据类型呢?

  1. 在C和C++中,在可移植代码中,您永远不知道像intlong int这样的类型的确切大小。如果将代码移动到不同的编译器(或不同的机器,或不同的操作系统),某些类型的大小可能会发生变化。这不一定是个问题;事实上,这只是一个问题,如果你想让它成为一个问题。(所有这些一直都是这样,与某人对"LLP64"answers"LP64"体系结构族的定义无关。)
  2. 在那些(希望是罕见的)情况下,当你需要一个确切大小的类型时,一个好的方法是使用<cstdint>中的int32_tuint64_t(或C中的<stdint.h>
  3. 但在大多数情况下,您确实不需要指定类型的确切大小。(有人说你需要指定每种类型的确切尺寸,但我的建议是忽略这些人。)
  4. 几乎唯一需要指定确切大小的时间是在尝试定义一个结构时,该结构可以以"二进制"方式读写,以符合某些外部强加的存储布局。但是,由于对齐、填充和字节顺序等问题,指定数据类型的确切大小通常是不够的。因此,最好还是编写显式序列化和反序列化代码(或者使用"文本"数据格式,如果可以的话)
  5. 我的底线是,我很少担心类型的确切大小