比较 Return/Break/Continue/Goto

来源:互联网 发布:剑三花哥捏脸数据 编辑:程序博客网 时间:2024/05/24 20:07
 

比较 Return/Break/Continue/Goto

 一看到这个标题,估计很多人会相当不屑。确实,这四条语句是C语句里再简单不过的,但是对于初学者而言,做一下区分和比较还是很有意义的。毕竟在这些简单的语句上,我们经常会犯一些低级的错误。更进一步,如果能灵活运用往往会有出人意料的效果,避免很多不必要的苦力劳作。

1、  return

return语句用于结束一个函数,而且仅有这一项作用。后面可以加一些常量、变量或者表达式等,作为函数的返回值。也可以不带这些项,就仅仅用于结束当前这个函数。

对于return语句要注意以下几点:

(1)       一个函数体里可以有多条return语句,但是你最好实际只想要程序执行其中的一条(程序也只会执行其中的一条),想借用多条return语句传递多个函数返回值的图谋注定是要失败的。下面这个函数是不可能实现两个数的交换的,这一限定会令很多初学者相当不爽,因为你编写的很多函数确实需要传递多个返回值,这一需求可以通过其他方法解决,可以参考相关书籍。

int swap_val(int a, int b)

{

int temp;

temp = a;

a = b;

b = temp;

return a;

return b;

}

(2)       多条return语句的一般伴随着选择语句,在选择分支比较多时,要特别注意。程序遇到return语句就会返回,后面的语句都不回被执行到。而对于这一点编译器不回报出任何错误或警告,因为这并不违反语法。

(3)       除了返回值为void的类型的函数之外,所以的函数都至少有一条return语句。实际上很多建议,在void类型的函数内也最好加一条return语句。

Void  fun()

{

return;

}

2、  break/continue

break用于从一个语句块里跳出来,继续执行下面的语句。可以用于选择语句或者循环语句。

(1)       switch

switch选择语句的一般实现如下:

switch(value)

{

    case ONE:

             …

             break;

    case TWO:

             …

             break;

    default:

             break;

}

 

case 是选择语句的入口点,一旦找到入口,程序就会向下执行,直到第一次遇到break语句跳出。这一点使得switch语句十分灵活,看下面的例子。

#include <stdio.h>

 

int main()

{

    int score;

 

    printf("Plese input a student's score(End with a letter):\n");

   

    while(scanf("%d", &score))

    {

        switch(score/10)

        {

            case 10:

                printf("Perfect\n");

                break;

            case 9:

            case 8:

                printf("Good\n");

                break;

            case 7:

            case 6:

                printf("Pass\n");

                break;

            default:

                printf("Failure\n");

                break;

        }

    }

 

    return 0;

}

可以看到break可以使你少敲几行代码,在这看来貌似也没省多少(没办法,写程序有时就是一项体力活啊,少写一行是一行),但是在一些复杂的程序中还是可以减少不少劳动的,而且会使代码简洁。

 

(2)       循环语句中的break和continue

这里只要注意一点就行了,break是跳出循环体执行循环下面的语句,而continue只是提前结束一个循环体的某一次循环,接着执行下一次循环。break不能跳出多个循环的嵌套。即,

for()

{

      for()

      {

             for()

            {

                   break;

             }

            A;

            }

}

B;

程序执行break后,执行的是A语句而不是B语句。

(3)break即可以用在选择结构里,也可以用在循环结构里。而continue只能用在for, while, do/while循环体里。

3、goto

goto很有点汇编的风格,所以在C这种相对高级一点语言中应该尽量少用,因为它会破坏程序的本来结构。甚至有一些“激进”分子建议应该禁止它(意识形态不同遭人排挤啊!招谁了,就要禁止人家)。但是goto也不是完全没有用处的,比如上例,就可以使用goto跳出这种循环的嵌套。

for()

{

       for()

       {

              for()

              {

                    goto flag;

               }

      A;

       }

}

flag: B;
原创粉丝点击