C 具有不同数据类型的函数调用

C 具有不同数据类型的函数调用,c,types,function-calls,C,Types,Function Calls,这个程序的第7行“pay=prt(pay);”不是应该抛出编译时或运行时错误,因为它正在向需要双精度的参数传递int吗?我用dev-c++很好地编译了它,并用两行输出运行了程序。请解释一下,谢谢 #include <stdio.h> int prt(double b); main () { int pay = 3; double tax = 2.2; pay = prt(pay); prt(tax); } int prt(double b)

这个程序的第7行“pay=prt(pay);”不是应该抛出编译时或运行时错误,因为它正在向需要双精度的参数传递int吗?我用dev-c++很好地编译了它,并用两行输出运行了程序。请解释一下,谢谢

#include <stdio.h>
int prt(double b);
main ()
{
    int pay = 3;
    double tax = 2.2;
    pay = prt(pay);
    prt(tax);
}     

int prt(double b)
{
    b *= 2;
    printf("%.2lf\n", b);   
}
#包括
int prt(双b);
主要()
{
int pay=3;
双重税=2.2;
pay=prt(pay);
prt(税务);
}     
int prt(双b)
{
b*=2;
printf(“%.2lf\n”,b);
}

在这种情况下,C将自动在不同的数字类型之间转换


请参阅。

在这种情况下,C将自动在不同的数字类型之间转换


请参阅。

您将函数声明为
int
,但从未返回任何内容,也没有给
main
返回类型。我想说,任何编译器都有权拒绝您的代码。

您将函数声明为
int
,但从未返回任何内容,也没有给
main
返回类型。我认为任何编译器都有权拒绝您的代码。

大小较小或相等的数据类型可以转换为较大的数据类型

在相反情况下: 浮点到int会导致截断,即删除小数部分。 双精度浮点数导致数字四舍五入
长整型到整型会导致多余的高阶位丢失。

具有较小或相等大小的数据类型可以转换为较高的数据类型

在相反情况下: 浮点到int会导致截断,即删除小数部分。 双精度浮点数导致数字四舍五入
长整型到整型会导致多余的高阶位下降。

的顶部答案提供了一种有趣的方法来强制执行类型严格性,这种方法依赖于模板和私有访问……呃,。不理解下一票。这个问题很容易理解,而且是有主题的。是否因为OP没有太多的教育,所以出现了否决票。如果是这样的话,我们应该把所有问题都否决掉。@ AA:这是C代码而不是C++。第二,它是模棱两可的。模棱两可?为什么我的代码在向要求双精度的函数发送int时没有编译失败?我认为那是相当标准的英语。最上面的答案清楚而容易地回答了这个问题,这一事实应该表明这个问题很容易理解。它所需要的只是一个简单的重新标记。的顶部答案提供了一种有趣的方式来强制执行类型严格性,这种方式依赖于模板和私有访问……呃,。不理解否决票。这个问题很容易理解,而且是有主题的。是否因为OP没有太多的教育,所以出现了否决票。如果是这样的话,我们应该把所有问题都否决掉。@ AA:这是C代码而不是C++。第二,它是模棱两可的。模棱两可?为什么我的代码在向要求双精度的函数发送int时没有编译失败?我认为那是相当标准的英语。最上面的答案清楚而容易地回答了这个问题,这一事实应该表明这个问题很容易理解。它所需要的只是一个简单的重新标记。第一个在技术上是允许的,尽管如果您尝试使用返回的值(它应该已经返回),您会得到UB。第二个要求诊断——C++不允许旧C的隐式int规则在C++中,即使你不使用这个值,也可以得到UB。刚从FULL中流出的是C++中的UB。第一个是技术上允许的,尽管如果您尝试使用返回的值(如果是的话),那么您将获得UB。第二个要求诊断——C++不允许旧C的隐式int规则在C++中,即使你不使用这个值,也可以得到UB。刚从结尾流出的是C++中的UB。你是认真的吗?这个问题甚至没有标记为java。即使是这样,也无法弥补这个设计拙劣、措辞拙劣的问题。@wadafarfar:你是认真的吗?这个问题甚至没有标记为java。即使是这样,它也无法弥补这个设计拙劣、措辞拙劣的问题。