如何从C中的函数返回值?

时间:2015-02-19 10:11:20

标签: c

int preced(char arr)
{
if(arr=='/')
    return 4;
if(arr=='*')
    return 3;
if(arr=='+' || arr=='-')
    return 2;
if(arr=='(')
    return 1;
} 

上面写的代码给了我一个警告:函数应该返回一个值。 我无法使用此函数应返回的值。 我该如何解决这个问题?

6 个答案:

答案 0 :(得分:2)

您的函数始终返回一个值。它并不是因为您只在满足某些条件时返回,即当arr'/''*''+''('之一时。

您必须确保涵盖所有情况:

int preced(char arr)
{
  /* as above */

  return 42; // or whatever
}

答案 1 :(得分:0)

如果所有if条件都失败,则返回语句不可用于返回。

只需添加

退出函数前最后

return 0

答案 2 :(得分:0)

您的函数正在返回条件中的值。请记住,if条件中的代码可能会或可能不会每次都执行。在您的情况下,if根据条件true返回值。如果完全没有满足这些条件怎么办?因此,返回值的每个函数应始终在每种情况下返回一个,即返回的值应明确

您实际上可以使用switch-case

int preced (char arr)
switch(arr)
{
    case '/':
          return 4;
    case '*':
          return 3;
    case '+':
    case '-':
          return 2;
    case '(':
          return 1;
    default:
          return 0;
}

答案 3 :(得分:0)

这是您的代码应该是

的方式
int preced(char arr)
{
if(arr=='/')
    return 4;
else if(arr=='*')
    return 3;
else if(arr=='+' || arr=='-')
    return 2;
else if(arr=='(')
    return 1;
else
    return 0;
} 

您收到了警告,因为如果arr不是if语句中的任何字符,那么该函数将不会返回任何内容。

答案 4 :(得分:0)

这是一个使用开关的好地方,主要是为了便于阅读。功能保持不变:

int preced(char arr) {
    switch(arr) {
        case '/': return 4;
        case '*': return 3;;
        case '+': //will fallthrough
        case '-': return 2;
        case '(': return 1;
        default: return 0;
    }
}

您的代码存在的问题是,有些方法可以在不返回内容的情况下完成该功能。如果所有的if都被忽略,因为arr例如是' a'。也许在你的程序中,这不会发生,但编译器不会知道,并将给出一个错误。在上面的开关中,默认' case处理这个问题。

答案 5 :(得分:0)

编译器警告preced可能在没有正确结果的情况下返回,请考虑使用switch default案例:

switch (arr) {
    case '/':
        return 4;
    case '*':
        return 3;
    case '+':
    case '-':
        return 2;
    case '(':
        return 1;
    default:
        return 0;
} 

另请注意,arr对于期望char的参数来说似乎不是一个好名字。