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

时间:2016-04-20 19:46:58

标签: 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编写的代码的长数据类型?

1 个答案:

答案 0 :(得分:4)

  1. 在C和C ++中,在便携式代码中,您永远不会知道intlong int类型的确切大小。如果将代码移动到其他编译器(或不同的机器或不同的OS),则某些类型的大小可能会发生变化。这不是一个问题;事实上,如果你想让它成为一个问题,这只是一个问题。 (所有这一切都是如此,与某人对" LLP64"以及" LP64"架构系列的定义无关。)
  2. 在那些(希望很少见)需要一种确切大小的情况下,一种好的方法是使用来自int32_t的{​​{1}}和uint64_t类型(或{{1}在C)。
  3. 但是你真的,真的不应该在大多数情况下指定一个类型的确切大小。 (有些人说你需要指定每种类型的确切大小,但我的建议是忽略那些人。)
  4. 几乎是你需要指定确切大小的唯一时间是在尝试定义一个你可以在"二进制"中读取和写入的结构时。时尚,以符合一些外部强加的存储布局。但是,由于对齐,填充和字节顺序等问题,指定数据类型的确切大小通常是不够的。因此,您最好还是编写显式序列化和反序列化代码(或者使用" text"数据格式,如果您可以使用它)。
  5. 我的底线是我很少担心类型的确切大小。