警告:控制可能达到非空函数的结束[-Wreturn-type]

时间:2015-10-25 12:17:52

标签: c controls

我在尝试编译这个波兰语命令行计算器时遇到此错误。

警告:控制可能会达到无效功能的结束       [-Wreturn型] }

我理解错误信息意味着我可能没有从函数中返回任何内容但是在哪里发生了什么?

#include <stdio.h>
#include <stdlib.h>


void push(int element);
int pop();


int main(int argc, char **argv)
{

    int op2;


    while (argc > 1)            
      {


        switch(argv[1][0])  {

          case '1':
          case '2':
          case '3':
          case '4':
          case '5':
          case '6':
          case '7':
          case '8':
          case '9':
          push(atoi(*argv));
          argv++;
          break;

          case '+':
          push(pop() + pop());
          argv++;
          break;

          case '*':
          push(pop() * pop());
          argv++;
          break;

          case '-':
          op2 = pop();
          push(pop() - op2);
          argv++;
          break;

          case '/':
          op2 = pop();
          if (op2 != 0) {
              push(pop() / op2);
              argv++;
          }

          else
              printf("error: zero divisor\n");
          break;

          default:
          printf("error: unknown operand %s\n", *argv);
          break;

          }

     }

     printf ("%d\n", pop());
     return 0;

 }        




#define STACKSIZE 1000

int next = 0;             /* next free stack position */
int stack[STACKSIZE];

void push(int element)  {

    if (next > STACKSIZE)  printf("error: stack full, can't push %d\n", element); 
    else stack[next++] = element; 

}


int pop()   {

    if (next == 0)  printf("stack empty\n"); 

    else return stack[--next]; 
}

2 个答案:

答案 0 :(得分:2)

当pop方法中的堆栈为空时,您不会返回值。

int pop()
{
    if (next == 0)
    {
        printf("stack empty\n"); 
        // return statement missing   
    }
    else
        return stack[--next]; 
}

这里可以返回0(或表示堆栈为空的值),但最好在弹出之前检查堆栈是否为空。例如,您可以在调用pop之前添加hasNextisEmpty方法或检查大小。

答案 1 :(得分:1)

如果next == 0中的pop在函数返回类型为return时没有int值,则会给出警告,您应该当一个函数不是void时,确保每个控制路径都有一个有效的返回类型,例如:

int pop()   {

if (next == 0) { printf("stack empty\n"); return 0; }

else return stack[--next]; 
}