我对C中函数参数类型提升的理解是,如果我调用一个类型为char
或short
的参数的非原型函数,它将被提升为{{1 }}。
问题:如果我使用int
作为参数并long
调用该怎么办?
如果参数作为sizeof(long) > sizeof(int)
传递,为什么不选择long
作为应该将所有积分参数提升到的类型?不是参数类型提升背后的原因,是通过使堆栈上的参数长度相同来使编译器更简单,这样运行时系统只需要知道参数的数量,而不是打扰他们的尺寸?
答案 0 :(得分:3)
为什么不选择
file = open("data.txt", "r") studentInfo = file.readlines() file.close() lines = [[line] for line in studentInfo] >>> print(lines) [['123, Bobbie Smith\n'], ['456, Suzie Lan\n'], ['789, Alex Palmer']]
...
因为{&#34}将所有内容宣传到long
"而long
并不存在设计已经创建。
现在,更改默认促销规则几乎可以打破现有C代码的每一部分,因为它也会改变int
和printf()
等来电的行为。
任何varargs类型的功能都会受到影响 - 其中包括open()
。可能还有其他更微妙的问题,但是"打破了所有的一切"是不充分的理由。