什么定义类型的大小?

Mic*_*chi 5 c gcc sizeof

ISO C标准指出:

sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
Run Code Online (Sandbox Code Playgroud)

我在BIT Linux mint(19.1)上使用GCC-8,大小long int8

我正在使用使用GCC 7的应用程序,并且编译器是64位的。的大小long int4。编译器或操作系统是否定义a的大小long int

tad*_*man 6

编译器会进行所有操作。操作系统只运行生成的二进制文件。

话虽这么说,编译器通常会制作一个操作系统可以使用的可执行文件,因此这里存在一些相互作用。由于只要大小一致int就不会影响大小之类的事情,因此您会发现变化。

换句话说,如果内核long int由于编译方式而期望为8个字节,那么您将希望以这种方式进行编译以匹配,否则编译后的代码将不匹配,并且所有共享库都将无法工作。

  • @tadman通常,编译器会生成与目标ABI兼容的二进制文件。但是,由于ABI和编译器往往同时来自同一个人(除非您喜欢汇编程序,否则没有一个人就没有多大用处),因此说出这实际上是一个“鸡与蛋”问题首先是哪个“规则”。 (2认同)
  • @Michi:Re“我想进一步了解为什么同一个编译器和同一个编译器在同一个架构上使用不同的大小。如果操作系统是64BIT,我将无法理解其中的区别。”:操作系统只能控制软件与其交互的方式。如果有一个操作系统例程需要传递一个32位整数,则必须将其传递一个32位整数。但是,在程序内部,程序(和编译器)可以执行任何所需的操作。如果编译器希望将32位整数称为“ int”,并将48位整数称为“ gromitz”,则可以。 (2认同)