void函数和float函数有什么区别?
What are the difference between void function and float function?
我还在学习但是...我不认为这些功能:
void CalculateGross(float hours, float payrate, float *gross) //3.4
float CalculateGross(float hours, float payrate) //3.4
做同样的事情。那么哪个更好呢?我假设 void 更好?
/*
3.0 Payroll Application
3.1 PrintReportHeadings(inout reportFile as file)
3.2 InitializeAccumulators(out totreg, totovt,totpayrate,totgross,totfed,
totstate,totssi,totdefr, totnet as real)
3.3 InputEmployeeData(out lastname, firstname as string,
out hours, payrate, defr as real)
3.4 CalculateGross(in hours, payrate as real, out gross as real)
3.5 computeTaxes(in g,d as real, out ft, st, ssit as real)
3.5.1 cFed(in g,d as real, out fed as real)
3.5.2 cState(in ft as real,out state as real)
3.5.3 cSSI(in g,d as real, out ssi as real)
3.7 PrintSummaryReport( ......)
3.7.1 printTotals( ....)
3.7.2 printAverages( ....)
*/
#include <stdio.h>
#include "TAXRATES.h"
void InputEmployeeData(char *lastname,char *firstname, // 3.3
float *hours,float *payrate, float *defr);
void CalculateGross(float hours, float payrate, float * gross); //3.4
float CalculateGross(float hours,float payrate); //3.4
extern void computeTaxes(float g,float d,float * ft,float *st,float *ssit); //3.5
int main(void)
{
char ln[15+1];
char fn[10+1];
float fed,state,ssi;
float g,h,p,d,n;
InputEmployeeData(&ln[0],&fn[0],&h,&p,&d); // call 3.3
g = CalculateGross(h,p); // call 3.4
// vs
//CalculateGross(40.00,25.00,&g); // alternate call 3.4
computeTaxes(g,d,ADDR(fed),ADDR(state),ADDR(ssi)); // call 3.5
n = g-fed-state-ssi-d;
printf(" Fed = %8.2f\n",fed);
printf(" State = %8.2f\n",state);
printf(" SSI = %8.2f\n",ssi);
printf(" Net = %8.2f\n",n);
while(getchar() != '\n'); // flush(stdin)
return 0;
}
void CalculateGross(float hours, float payrate, float * gross) //3.4
{
if (hours <= 40)
*gross = hours * payrate;
else
*gross = 40* payrate + 1.5 * payrate * (hours-40);
}
float CalculateGross(float hours,float payrate) .. //3.4
{
if (hours <= 40)
return hours * payrate;
else
return 40* payrate + 1.5 * payrate * (hours-40);
}
void InputEmployeeData(char *lastname,char *firstname, // 3.3
float *hours,float *payrate, float *defr)
{
printf(" Enter the name ==> ");
scanf("%s%s",firstname,lastname);
printf(" Enter the hours and payrate ==> ");
scanf("%f%f",hours,payrate);
printf(" Enter the deferred earning amount ==> ");
scanf("%f",defr);
}
函数应该有输入和单个输出。虚空说做点什么。指针很棒,但目的是计算一些东西。当然,尽可能使用 f(x) = y,而不是 f(x, out y)。
void CalculateGross(float hours, float payrate, float * gross); //3.4
float CalculateGross(float hours,float payrate); //3.4
其中:
void CalculateGross(float hours, float payrate, float * gross) //3.4
{
if (hours <= 40)
*gross = hours * payrate;
else
*gross = 40* payrate + 1.5 * payrate * (hours-40);
}
此处 - 它对您的代码没有任何影响。 (你会收到警告……但没有影响)为什么?函数名前的type
为函数定义了return
的类型。如果你这样做,你会得到什么:
foo = CalculateGross (....);
由于 CalculateGross
没有 return 任何值(它只在内部对值进行操作),return 类型对其他任何地方都没有影响。
哪个是正确的?那是一个不同的问题。 void
对于没有值 return 的所有函数都是正确的。当您指定 float
时,编译器将检查您的函数是否为 return somevalue;
。如果未找到,它将生成警告(或错误)。
因此,如果您的函数 return 是一个值(或指针),请将 type
与函数 return 的类型相匹配。如果你的函数 return 什么都没有,void
是正确的 return 类型。
注意:仅仅因为你声明了一个函数void
并不意味着你不能在void函数中使用return
。您可以单独使用 return;
来使 return 发挥作用( 摆脱困境 ),而无需 return 值。
我还在学习但是...我不认为这些功能:
void CalculateGross(float hours, float payrate, float *gross) //3.4
float CalculateGross(float hours, float payrate) //3.4
做同样的事情。那么哪个更好呢?我假设 void 更好?
/*
3.0 Payroll Application
3.1 PrintReportHeadings(inout reportFile as file)
3.2 InitializeAccumulators(out totreg, totovt,totpayrate,totgross,totfed,
totstate,totssi,totdefr, totnet as real)
3.3 InputEmployeeData(out lastname, firstname as string,
out hours, payrate, defr as real)
3.4 CalculateGross(in hours, payrate as real, out gross as real)
3.5 computeTaxes(in g,d as real, out ft, st, ssit as real)
3.5.1 cFed(in g,d as real, out fed as real)
3.5.2 cState(in ft as real,out state as real)
3.5.3 cSSI(in g,d as real, out ssi as real)
3.7 PrintSummaryReport( ......)
3.7.1 printTotals( ....)
3.7.2 printAverages( ....)
*/
#include <stdio.h>
#include "TAXRATES.h"
void InputEmployeeData(char *lastname,char *firstname, // 3.3
float *hours,float *payrate, float *defr);
void CalculateGross(float hours, float payrate, float * gross); //3.4
float CalculateGross(float hours,float payrate); //3.4
extern void computeTaxes(float g,float d,float * ft,float *st,float *ssit); //3.5
int main(void)
{
char ln[15+1];
char fn[10+1];
float fed,state,ssi;
float g,h,p,d,n;
InputEmployeeData(&ln[0],&fn[0],&h,&p,&d); // call 3.3
g = CalculateGross(h,p); // call 3.4
// vs
//CalculateGross(40.00,25.00,&g); // alternate call 3.4
computeTaxes(g,d,ADDR(fed),ADDR(state),ADDR(ssi)); // call 3.5
n = g-fed-state-ssi-d;
printf(" Fed = %8.2f\n",fed);
printf(" State = %8.2f\n",state);
printf(" SSI = %8.2f\n",ssi);
printf(" Net = %8.2f\n",n);
while(getchar() != '\n'); // flush(stdin)
return 0;
}
void CalculateGross(float hours, float payrate, float * gross) //3.4
{
if (hours <= 40)
*gross = hours * payrate;
else
*gross = 40* payrate + 1.5 * payrate * (hours-40);
}
float CalculateGross(float hours,float payrate) .. //3.4
{
if (hours <= 40)
return hours * payrate;
else
return 40* payrate + 1.5 * payrate * (hours-40);
}
void InputEmployeeData(char *lastname,char *firstname, // 3.3
float *hours,float *payrate, float *defr)
{
printf(" Enter the name ==> ");
scanf("%s%s",firstname,lastname);
printf(" Enter the hours and payrate ==> ");
scanf("%f%f",hours,payrate);
printf(" Enter the deferred earning amount ==> ");
scanf("%f",defr);
}
函数应该有输入和单个输出。虚空说做点什么。指针很棒,但目的是计算一些东西。当然,尽可能使用 f(x) = y,而不是 f(x, out y)。
void CalculateGross(float hours, float payrate, float * gross); //3.4
float CalculateGross(float hours,float payrate); //3.4
其中:
void CalculateGross(float hours, float payrate, float * gross) //3.4
{
if (hours <= 40)
*gross = hours * payrate;
else
*gross = 40* payrate + 1.5 * payrate * (hours-40);
}
此处 - 它对您的代码没有任何影响。 (你会收到警告……但没有影响)为什么?函数名前的type
为函数定义了return
的类型。如果你这样做,你会得到什么:
foo = CalculateGross (....);
由于 CalculateGross
没有 return 任何值(它只在内部对值进行操作),return 类型对其他任何地方都没有影响。
哪个是正确的?那是一个不同的问题。 void
对于没有值 return 的所有函数都是正确的。当您指定 float
时,编译器将检查您的函数是否为 return somevalue;
。如果未找到,它将生成警告(或错误)。
因此,如果您的函数 return 是一个值(或指针),请将 type
与函数 return 的类型相匹配。如果你的函数 return 什么都没有,void
是正确的 return 类型。
注意:仅仅因为你声明了一个函数void
并不意味着你不能在void函数中使用return
。您可以单独使用 return;
来使 return 发挥作用( 摆脱困境 ),而无需 return 值。