如果有返回值的函数中一直跳过含有return 1的条件语句而不写return 0会发生什么情况

int Ballhitbrick(int map[][5], int row, int cols,int *ballX,int *ballY)
{
    int ballRow = (*ballY - 25) / 25;
    int ballCols = *ballX / 100;
    if(ballCols < 5 && ballRow < 4 && map[ballRow][ballCols] != -1)
    {
        map[ballRow][ballCols] = -1;
        return 1;
    }
    return 0;//返回零必须写因为最初球的位置不会满足if条件语句,如果不写那么最终返回的是什么呢?
    
}

意思就是如果这个函数一直不满足if的条件那么程序不会进入if条件语句,即跳过if语句那么函数返回的是什么,程序会报错吗?再者如果把这个函数作为逻辑判断放在if语句中那么if语句中逻辑值是真的还是假的?

如果没有绝对能执行到的return语句,编译器是会警告的
但只是警告,你还是可以运行的(VS开发环境),编译器会返回一个垃圾值

C++的默认返回值是函数结束是存在某个寄存器内的值,如果你在函数内做过计算,可能返回一个计算的中间值或计算结果

会报错,会提示你某某函数必须要有返回值。

  1. 没有return 0; 一般编译器会报警告;
  2. 一般情况下返回的值是栈最后面的一个值。
    ```c
    #include <stdio.h>

int return_val(int v)
{
int i = 0, h = 3;
h = v;
}

int main(int argc, char **argv)
{
int i = 0;
for(i = 0; i < 10; i++)
printf("value = %d\n",return_val(i));
}

上面代码的结果是:
```c
value = 0
value = 2
value = 4
value = 6
value = 8
value = 10
value = 12
value = 14
value = 16
value = 18
```
```c
#include <stdio.h>

int return_val(int v)
{
   int i = 0, h = 3;
   h = v;
   i = v + h;
   if(i)
   {
     printf("i = %d",i);
   }
}


int main(int argc, char **argv)
{
   int i = 0;
  for(i = 0; i < 10; i++)
  printf("value = %d\n",return_val(i));
   
}
```
上面代码的结果是:
```c
value = 0
i = 2value = 5
i = 4value = 5
i = 6value = 5
i = 8value = 5
i = 10value = 6
i = 12value = 6
i = 14value = 6
i = 16value = 6
i = 18value = 6
```
所以有返回值的,一定要定义所有可能退出的分支都要返回值,否则这种代码产生`bug`很难解决。