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++的默认返回值是函数结束是存在某个寄存器内的值,如果你在函数内做过计算,可能返回一个计算的中间值或计算结果
会报错,会提示你某某函数必须要有返回值。
return 0;
一般编译器会报警告;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`很难解决。