这本书在第45页上说明了以下内容
由于函数调用的参数是表达式,因此在将参数传递给函数时也会发生类型转换。在没有函数原型的情况下,char和short变为int,float变为double。这就是为什么我们声明函数参数为int和double,即使用char和float调用函数。
我不明白最后一句话在说什么。有人能引导我朝着正确的方向前进吗?
答案 0 :(得分:3)
我们可以看到这里发生的事情。根据{{3}},这是printf()
:
int printf(const char * format, ...);
...
表示此函数可以使用未指定数量的未指定类型的参数,并且因为未指定,所有int
和double
的数值类型标准化{1}}除第一个之外的参数,已指定。
示例:
printf()
传递给char x = 10;
short y = 100;
int z = 1000;
printf("Values of char is %d, short is %d, and int is %d", x, y, z);
时,所有这些整数类型都会自动重新标记为int
。我们可以看到printf()
适用于所有人。
请注意,不会转换大于%d
和double
的类型,例如int
,long int
,long double
等。这些类型为64位
答案 1 :(得分:0)
当您在C中使用原型作为函数时(ansi C,因为原始的K& R规范没有以这种方式定义参数),您将形式参数声明为具有类型。当您在实际表达式中匹配它时,可能会发生两件事:
如果没有找到原型,你提出的规则就超出了规定,所以chars和short被提升为int值,浮动类型值被提升为double。
引用段落中的最后一个短语告诉您,在某些示例(未显示)中,类型被用于形式参数,以确保实际表达式转换为形式参数的类型。