C 中的类型提升,将 long 作为参数传递

Type Promotion in C, Passing a long as an Argument

我对 C 中函数参数类型提升的理解是,如果我使用 charshort 类型的参数调用非原型函数,它将提升为 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" 是不这样做的充分理由。