C语言中,if语句后面加return 的用法的疑问。

2020-01-21 21:34发布

有这么一段代码:
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在这里的作用是结束函数的运行?
有点疑惑,请大侠指教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
44条回答
380121850
1楼-- · 2020-01-23 17:21
回复【9楼】hzr0071  
千万不要用return。还不如吧goto搬出来用。或者定义flag然后连续break。
return直接翻译成ret。其实函数最后都有寄存器出栈函数(汇编模式能看到)。return以后会跑偏的。不过控制pc、也可以人工跑偏用来写系统。
-----------------------------------------------------------------------

。。。。。。。。。。这个,是极个别芯片现象吧

按照一般在C里面,RETURN是函数返回,对应的一返回需要的指令串,不是单单一个RET
cumtgao
2楼-- · 2020-01-23 19:22
return是退出当前函数,break是跳出当前循环。
muzheyun
3楼-- · 2020-01-24 00:33
 精彩回答 2  元偷偷看……
zengxy
4楼-- · 2020-01-24 02:53
回复【12楼】gprs_new  
-----------------------------------------------------------------------

不太可能,编译器会保证的
ddwl99
5楼-- · 2020-01-24 07:36
return是跳出函数
就是释放堆栈中的内容。所有函数内建立的临时变量所占的地址都会没有。

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语言中也会出现越界的。那都是由于指针越界造成的。就是使用指针的时候一定要注意一下,不要乱指。空间用完就要赶快释放等等问题。
hunter0395
6楼-- · 2020-01-24 09:12
break的作用是跳出所在的循环体。在switch段落中用于结束当前语句段的执行,跳出switch块。
return的作用是结束所在的函数,跳到函数的结束部分,如果有返回值,就带回返回值。
在优化编译条件下,如果编译器能够判断出某些语句是一定不能被执行的,就不会编译。
在某些void函数中return语句不是非写不可的,如果没有return,编译器在编译的时候也会添加return操作。
即使函数是被中断调用的,return也不会惹出麻烦的。

一周热门 更多>