我对C中函数参数类型提升的理解是,如果我用char
或short
类型的参数调用非原型函数,它将被提升为int
。
问题:如果我用long
作为参数,并以sizeof(long) > sizeof(int)
命名它会怎么样?
如果参数作为long
传递,为什么不选择long
作为应该将所有积分参数提升到的类型?参数类型提升背后的原因,难道不是为了使编译器更容易编写,使堆栈上的参数保持相同的长度,这样运行时系统只需要知道参数的数量,而不需要考虑它们的大小?
发布于 2017-09-17 05:02:13
为什么不选择
long
..。
因为当创建“将所有东西推广到long
”设计时,并不存在int
。
现在,更改默认的升级规则将打破几乎所有现存的C代码,因为它还会改变调用(如printf()
和open()
)的行为。
任何varargs类型的函数都会受到影响,其中包括open()
。也许还有其他更微妙的问题,但“打破一切”是不这样做的充分理由。
https://stackoverflow.com/questions/46264244
复制