【发布时间】:2020-05-18 09:06:16
【问题描述】:
我正在上 Udemy C 课程,对 C 中的函数产生了一些疑问。其中一个练习是关于使用函数的温度转换(摄氏度、F 和 K),当我的第一个想法是:
void CF(){
float temp1, temp2;
printf("Escribe que temperatura quieres convertir a Fahrenheit: ");
scanf("%f", &temp1);
temp2 = (temp1 * 1.8) + 32;
printf("La temperatura en Fahrenheit es: %f", temp2);
}
但解决的练习使用:
float fahrenheit(float C){
float F=0;
F = (9*C)/5 + 32;
return F;
}
在我通过函数介绍的同时,通过“int main”程序输入数据。
我的问题是: - 引入数据最好是通过int主代码还是函数? - 为什么他使用“Float”函数而我使用“void”函数并且在这两种情况下都可以正常工作?
无论如何,我的代码有效,但我想知道什么更好以及为什么。
提前感谢并原谅我的英语。
【问题讨论】:
-
float fahrenheit(float C){将更具可重用性,因为它不关心数据的来源。您的解决方案仅适用于来自标准输入的输入 -
我明白了。谢谢。
-
@Albert 只是改变返回类型并没有做任何事情;您还需要实际返回一个值。
-
从另一个角度来看:第二个版本实际上是一个数学意义上的函数——它将输入值映射到输出值。函数的输出只取决于输入参数,相同的输入总是产生相同的输出。这就是所谓的“纯”功能。其优点之一是此类功能易于测试。另一方面,您的 void 函数通过副作用进行操作,这使得测试和重用变得更加困难。
-
@PaulOgilvie C 正式将该术语定义为 (C17 5.1.2.3) “访问 volatile 对象、修改对象、修改文件或调用执行任何这些操作的函数都是 side effects, ..." 如果流
stdout被视为“文件”,但 printf 肯定会在内部修改各种对象,这是有争议的。