有这么一段代码:
void xxx()
{
if(rs_buf[0]=='$')
{
for(i=0;i<sizeof(GPS_GPRMC)-1;i++)
{
j=getuartdat();
if(j<256)
{
rs_buf=(alt_u16)j;
if(rs_buf!=GPS_GPRMC)
return;
}
}
}
}
当这句话成立: if(rs_buf!=GPS_GPRMC)
return;
即return执行后,程序再怎样运行,是不是直接跳出了函数xxx,即return在这里的作用是结束函数的运行?
有点疑惑,请大侠指教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
千万不要用return。还不如吧goto搬出来用。或者定义flag然后连续break。
return直接翻译成ret。其实函数最后都有寄存器出栈函数(汇编模式能看到)。return以后会跑偏的。不过控制pc、也可以人工跑偏用来写系统。
-----------------------------------------------------------------------
。。。。。。。。。。这个,是极个别芯片现象吧
按照一般在C里面,RETURN是函数返回,对应的一返回需要的指令串,不是单单一个RET
-----------------------------------------------------------------------
不太可能,编译器会保证的
就是释放堆栈中的内容。所有函数内建立的临时变量所占的地址都会没有。
break是跳出最近的一个循环
continue是继续下一个循环
例如
void fun1(void)
{
int tmp = 0;
for(; tmp < 20; tmp++)
{
i++;
if(i > 10)
{
return;
}
}
}
这里面就是这个函数执行完,i应该等于11,前提是假设i为全局变量,从零开始
void fun2(void)
{
int m = 0;
int n = 0;
for(;m < 5;m++)
{
while(n++ < 5)
{
if(i[m][n] <= 0)
{
break;//进入这个if的时候,就意味着内层循环要结束了,进行下一个for循环,不会执行要下句话
}
i[m][n]--;
}
n = 0;
}
}
前提是i为全局变量。
void fun3(void)
{
int m = 0;
int n = 0;
for(;m < 5;m++)
{
while(n++ < 5)
{
if(i[m][n] <= 0)
{
continue;//进入这个if的时候,就意味着本次循环要结束了,进行下一次的while循环
}
i[m][n]--;
}
n = 0;
}
}
这个函数跟fun2基本一样,只是把break换成了continue。
其实fun3内的while函数的执行过程就是while(n++ < 5){if(i[m][n] > 0){i[m][n]--;}}.
例子举的有点不太恰当,呵呵。意思就这个意思。
其实最好不要乱使用GOTO语句。
另外回复12楼,C语言中也会出现越界的。那都是由于指针越界造成的。就是使用指针的时候一定要注意一下,不要乱指。空间用完就要赶快释放等等问题。
return的作用是结束所在的函数,跳到函数的结束部分,如果有返回值,就带回返回值。
在优化编译条件下,如果编译器能够判断出某些语句是一定不能被执行的,就不会编译。
在某些void函数中return语句不是非写不可的,如果没有return,编译器在编译的时候也会添加return操作。
即使函数是被中断调用的,return也不会惹出麻烦的。
一周热门 更多>