C 中的类型提升,将 long 作为参数传递
Type Promotion in C, Passing a long as an Argument
我对 C 中函数参数类型提升的理解是,如果我使用 char
或 short
类型的参数调用非原型函数,它将提升为 int
.
问题:如果我用 long
作为参数调用它,并且 sizeof(long) > sizeof(int)
会怎样?
如果参数作为 long
传递,为什么不选择 long
作为所有整数参数应提升到的类型?不是参数类型提升背后的原因,是为了使编译器更易于编写,通过使压入堆栈的参数长度相同,以便运行时系统只需要知道参数的数量,而不必打扰他们的尺寸?
why not choosing long
...
因为在创建 "promote everything to int
" 设计时 long
不存在。
现在,更改默认提升规则几乎会破坏现有 C 代码的每一部分,因为它还会更改 printf()
和 open()
等调用的行为。
任何可变参数类型的函数都会受到影响 - 其中包括 open()
。可能还有其他更微妙的问题,但 "breaking just about everything" 是不这样做的充分理由。
我对 C 中函数参数类型提升的理解是,如果我使用 char
或 short
类型的参数调用非原型函数,它将提升为 int
.
问题:如果我用 long
作为参数调用它,并且 sizeof(long) > sizeof(int)
会怎样?
如果参数作为 long
传递,为什么不选择 long
作为所有整数参数应提升到的类型?不是参数类型提升背后的原因,是为了使编译器更易于编写,通过使压入堆栈的参数长度相同,以便运行时系统只需要知道参数的数量,而不必打扰他们的尺寸?
why not choosing
long
...
因为在创建 "promote everything to int
" 设计时 long
不存在。
现在,更改默认提升规则几乎会破坏现有 C 代码的每一部分,因为它还会更改 printf()
和 open()
等调用的行为。
任何可变参数类型的函数都会受到影响 - 其中包括 open()
。可能还有其他更微妙的问题,但 "breaking just about everything" 是不这样做的充分理由。