nou*_*fal 3 c arguments function type-conversion
我正在阅读 K & R 的书The C programming Language
来学习 c。它说
由于函数调用的参数是表达式,因此当参数传递给函数时也会发生类型转换。在没有函数原型的情况下,char和short变成int,float变成double。
在过去的几天里,我一直在努力理解这条线。我认为这是很重要的一点。无论我做出什么假设,它都不会实现。有人可以帮助我清楚地理解它吗?
在 ANSI C 之前的版本中,没有原型的函数很常见。在这种情况下,仅发生默认类型的促销。
当存在原型时,每个参数表达式都会转换为函数期望的类型,就像存在强制转换一样:
// Declaration
void callMe(char x, int y);
...
// Call
callMe(50, 'x');
Run Code Online (Sandbox Code Playgroud)
上面的调用相当于调用
callMe((char)50, (int)'x');
Run Code Online (Sandbox Code Playgroud)
这很重要,因为调用者和被调用者之间在传递参数方面存在隐式协议:传递参数的方式以及参数的内存占用取决于类型。如果调用者没有以正确的格式将参数放入内存中,被调用者将无法正确使用这些参数。这就是为什么两者必须以某种方式就每个参数的类型达成一致。该标准称“协议”以功能原型的形式出现。如果原型缺失,标准将提供“默认协议”,即char
和short
成为int
,并且float
成为double
。