none
一个函数两个return RRS feed

  • 问题

  • 在《The C Programming Language B.W.Kernighan&D.M.Ritchie》书的7.5节中的实例有两个return,我的理解是无论第一个return语句执行与否,第二个return语句一定执行,但是这本书这么权威不可能出错,所以我很迷惑,不知道我的理解哪里有问题,每次都执行最后一个return语句为什么还要在前面写一个return语句。(又没有break类似功能的语句跳出)

    代码如下:

     #include <stdio.h> 
     
       /* cat:  concatenate files, version 1 */ 
       main(int argc, char *argv[]) 
       { 
           FILE *fp; 
           void filecopy(FILE *, FILE *) 
     
           if (argc == 1) /* no args; copy standard input */ 
               filecopy(stdin, stdout); 
           else 
              while(--argc > 0) 
                  if ((fp = fopen(*++argv, "r")) == NULL) { 
                      printf("cat: can't open %s\n, *argv); 
                      return 1; 
                  } else { 
                     filecopy(fp, stdout); 
                     fclose(fp); 
                  } 
              return 0; 
       } 
     
        /* filecopy:  copy file ifp to file ofp */ 
        void filecopy(FILE *ifp, FILE *ofp) 
        { 
            int c; 
     
            while ((c = getc(ifp)) != EOF) 
                putc(c, ofp); 
        } 


    煮酒论英雄


    2012年2月28日 2:16

答案

  • .

             一个函数中是可以包含任意多个return的, 不管执行流程触发了哪个return, 都会造成当前函数立即终止, 所以不存在执行两个或以上return的可能.

             return 就是退出当前函数,  入口只有一个, 但出口可以有很多个, 你一旦出了那个函数, 那函数里面的所有东西就全都跟你无关了.

    2012年2月28日 2:30
  • C/C++ 中的reutrn语句:
    通过在函数中使用返回语句,返回一个值给函数,同时终止函数的调用,返回主函数。
    格式:
    return (表达式);
    或return 表达式;
    功能:
    (1)计算表达式的值,将表达式的值返回给函数。
    (2)从被调用的函数返回主调函数。
    说明:
    (1)返回值类型应和函数类型一致,不一致将返回值自动转换成函数类型。
    (2)函数中可以有多条返回语句,这时一般与if语句联用,执行到哪一条返回语句,哪条返回语句起作用。
    (3)函数中无return语句,执行至函数体结尾时返回,此时将返回一个不确定的值给函数。
    (4)如果只需要从函数中返回,而不需带回值,使用不带表达式的return语句。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年2月28日 4:43
    版主

全部回复

  • .

             一个函数中是可以包含任意多个return的, 不管执行流程触发了哪个return, 都会造成当前函数立即终止, 所以不存在执行两个或以上return的可能.

             return 就是退出当前函数,  入口只有一个, 但出口可以有很多个, 你一旦出了那个函数, 那函数里面的所有东西就全都跟你无关了.

    2012年2月28日 2:30
  • C/C++ 中的reutrn语句:
    通过在函数中使用返回语句,返回一个值给函数,同时终止函数的调用,返回主函数。
    格式:
    return (表达式);
    或return 表达式;
    功能:
    (1)计算表达式的值,将表达式的值返回给函数。
    (2)从被调用的函数返回主调函数。
    说明:
    (1)返回值类型应和函数类型一致,不一致将返回值自动转换成函数类型。
    (2)函数中可以有多条返回语句,这时一般与if语句联用,执行到哪一条返回语句,哪条返回语句起作用。
    (3)函数中无return语句,执行至函数体结尾时返回,此时将返回一个不确定的值给函数。
    (4)如果只需要从函数中返回,而不需带回值,使用不带表达式的return语句。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年2月28日 4:43
    版主
  • 非常感谢你的回答 我已经明白


    煮酒论英雄

    2012年2月28日 9:17
  • 非常感谢你的详细解答 使我更进一步了解了return语句的使用 参见你们两个人的回答我有了更大的收获

    煮酒论英雄

    2012年2月28日 9:19