C语言中的void错误信息

3
#include <stdio.h>

void simpleInterest (double Princ, double Rate, int Time)
{
      double value;
      value = Princ*Rate*Time;
      return value;
}

int main (int argc, char*argv[])
{
      printf("the value is %d", simpleInterest (100,0.01,5))
}

我似乎找不到我的代码有什么问题,我刚开始学习C语言,今天才刚刚开始,我收到了一个错误代码:

simpleInterest: warning return with a value, in function returning void [enabled by default]

这实际上意味着什么?我的代码实际上出了什么问题?

3个回答

3
一个返回类型为void的函数不会返回任何值。
void simpleInterest (double Princ, double Rate, int Time)  
  ^
  |
Return type void

您需要返回一个double类型的
要返回double类型,您的函数应该像这样

double simpleInterest (double Princ, double Rate, int Time) 
{ 

        double value;
        value = Princ*Rate*Time;
        return value;
}   

感谢 Shafik yaghmour 指出,在更改 main 中的 printf 格式说明符为%f 时,请不要忘记点它。

3
void simpleInterest (double Princ, double Rate, int Time)
    {
          double value;
          value = Princ*Rate*Time;
          return value; //void function should not return anything
    } 

您需要使用双重返回类型声明和定义函数。

 double simpleInterest (double Princ, double Rate, int Time)
    {
          double value;
          value = Princ*Rate*Time;
          return value; 
    } 

当你返回双精度时,应在printf语句中使用%f格式说明符。否则将引发未定义的行为。
printf("the value is %f", simpleInterest (100,0.01,5))

2
printf 的格式说明符必须更改为 %f,否则此更改将导致未定义的行为。 - Shafik Yaghmour
是的,注意到了那个。让它留给 OP 处理。 - Gangadhar
2
你需要注意这一点,否则你的答案是不正确的。 - Shafik Yaghmour

2

您在这里试图返回一个double,但是将simpleInterest定义为返回void

return value;

如果您想从此函数返回一个双精度,则应更改签名如下:

double simpleInterest (double Princ, double Rate, int Time)
^^^^^^

如果我们查看C99草案标准第6.8.6.4节返回语句所述(强调我的),那么这也是未定义的行为:

带有表达式的返回语句不应出现在返回类型为void的函数中。没有表达式的返回语句只能出现在返回类型为void的函数中。

假设您确实想要返回 double ,则printf格式说明符需要从%d更改为%f,否则这也会导致未定义的行为:

printf("the value is %f", simpleInterest (100,0.01,5)) ;
                     ^^  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接