我对 C 中函数参数类型提升的理解是,如果我使用类型为 char
或 short
的参数调用非原型(prototype)函数,它将得到提升为 int
。
问题:如果我用 long
作为参数调用它,并且 sizeof(long) > sizeof(int)
会怎样?
如果参数作为 long
传递,为什么不选择 long
作为所有整型参数应提升为的类型?不是参数类型提升背后的原因,是为了使编译器更易于编写,通过使压入堆栈的参数长度相同,以便运行时系统只需要知道参数的数量,而不必打扰他们的尺寸?
最佳答案
why not choosing
long
...
因为在创建“将所有内容都提升为int
”设计时,long
并不存在。
现在,更改默认提升规则几乎会破坏现存的 C 代码的每一部分,因为它还会更改调用的行为,例如 printf()
和 open()
。
任何可变参数类型的函数都会受到影响 - 其中包括 open()
。可能还有其他更微妙的问题,但“破坏几乎所有东西”是不这样做的充分理由。
关于c - C 中的类型提升,将 long 作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46264244/