C++ 是否有必要在为Windows和Linux编写的程序中处理长数据类型?

C++ 是否有必要在为Windows和Linux编写的程序中处理长数据类型?,c++,C++,根据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编写的代码的长数据类型?p>

根据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编写的代码的长数据类型?p> <> LI>在C和C++中,在可移植代码中,您永远不知道像“代码> int <代码> >或<代码> long int < />代码的大小。如果将代码移动到不同的编译器(或不同的机器,或不同的操作系统),某些类型的大小可能会改变。这不一定是个问题;事实上,这只是一个问题,如果你想让它成为一个问题。(所有这些都是事实,与某人对“LLP64”和“LP64”体系结构系列的定义无关。)
  • 在那些(希望很少)需要精确大小的类型的情况下,一个好方法是使用
    中的
    int32\u t
    uint64\u t
    (或C中的
    )之类的类型
  • 但大多数情况下,您确实不需要指定类型的确切大小。(有人说你需要指定每种类型的确切大小,但我的建议是忽略这些人。)
  • 几乎唯一需要指定确切大小的时间是在尝试定义一个可以以“二进制”方式读写的结构以符合某些外部强加的存储布局时。但是,由于对齐、填充和字节顺序等问题,指定数据类型的确切大小通常是不够的。因此,不管怎样,最好还是编写显式序列化和反序列化代码(或者使用“文本”数据格式,如果可以的话)
  • 我的底线是,我很少担心类型的确切大小
  • <> LI>在C和C++中,在可移植代码中,您永远不知道像“代码> int <代码> >或<代码> long int < />代码的大小。如果将代码移动到不同的编译器(或不同的机器,或不同的操作系统),某些类型的大小可能会改变。这不一定是个问题;事实上,这只是一个问题,如果你想让它成为一个问题。(所有这些都是事实,与某人对“LLP64”和“LP64”体系结构系列的定义无关。)
  • 在那些(希望很少)需要精确大小的类型的情况下,一个好方法是使用
    中的
    int32\u t
    uint64\u t
    (或C中的
    )之类的类型
  • 但大多数情况下,您确实不需要指定类型的确切大小。(有人说你需要指定每种类型的确切大小,但我的建议是忽略这些人。)
  • 几乎唯一需要指定确切大小的时间是在尝试定义一个可以以“二进制”方式读写的结构以符合某些外部强加的存储布局时。但是,由于对齐、填充和字节顺序等问题,指定数据类型的确切大小通常是不够的。因此,不管怎样,最好还是编写显式序列化和反序列化代码(或者使用“文本”数据格式,如果可以的话)
  • 我的底线是,我很少担心类型的确切大小

  • 这完全取决于你对这些数据做了什么。。。这个问题似乎不清楚。语言标准保证
    long
    至少为32位;你不能指望更多。“有必要小心吗”,“如何考虑”--请你不要那么含糊不清好吗?@Keith Thompson,阅读回答中的评论,也许这会帮助你理解问题不,问题本身需要更清楚。具体取决于你对这些数据做了什么。。。这个问题似乎不清楚。语言标准保证
    long
    至少为32位;你不能指望更多。“有必要小心吗”,“如何考虑”--请你不要那么含糊不清好吗?@Keith Thompson,阅读回答中的评论,也许这会帮助你理解问题不,问题本身需要更清楚。我不是在说C,这里考虑的是程序纯C++,ToBi303没有首先注意到C++标签,答案是更新的。我们应该<代码> <代码> >代码> <代码>。如果是C++,你应该使用<代码>包含< /Calp> @ NaNaOLIVER:不,这就是代码> iT32×T/<代码>保证为32位,如果平台不支持32位类型,则<代码> IT32×T < /COD>不存在。我不讨论C,这里考虑您的程序是纯C++ @ ToBi303没有注意到C++标签,答案是更新的。我们应该<代码> <代码> >代码> <代码>。如果是C++,你应该使用
    #include
    @NathanOliver:不,这就是
    int\u至少32\u t
    的用途
    int32\u t
    保证为32位,如果平台不支持32位类型,则
    int32\u t
    不存在。