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

标签 c c89

我对 C 中函数参数类型提升的理解是,如果我使用类型为 charshort 的参数调用非原型(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/

相关文章:

c - 堆栈上的动态内存分配

c - 在 Mac OS X 上编译 ncurses 应用程序时出错

c - 将 libpq-fe.h 添加到 qt 现有项目

c - 由于神秘原因,文件加载脚本无法工作

c - 如何在 C90 中方便地定义由包装在 union 内的函数指针组成的数组?

c - 整数除法的行为是什么?

c - 理解 C 中的输入和输出

c - c中的二叉搜索树插入

c - 使用 C 实现哈希表

c - 是否可以连续测试两个换行符?