C++流程控制中用于跳转的return和goto语句学习教程

 更新时间:2016年01月18日 14:22:34   投稿:goldensun  
这篇文章主要介绍了C++流程控制中用于跳转的return和goto语句学习教程,是C++入门学习中的基础知识,需要的朋友可以参考下

return 语句
终止函数的执行并返回对调用函数的控制(或对操作系统的控制,如果您从 main 函数转移控制)。紧接在调用之后在调用函数中恢复执行。
语法

return [expression];

备注
expression 子句(如果存在)将转换为函数声明中指定的类型,就像正在执行初始化一样。从该类型的表达式到 return 类型的函数的转换会创建临时对象。

expression 子句的值将返回调用函数。如果省略该表达式,则函数的返回值是不确定的。构造函数和析构函数以及类型为 void的函数无法在 return 语句中指定表达式。所有其他类型的函数必须在 return 语句中指定表达式。
当控制流退出封闭函数定义的块时,结果将与执行不带表达式的 return 语句所获得的结果一样。这对于声明为返回值的函数无效。
一个函数可以包含任意数量的 return 语句。
以下示例将一个表达式与 return 语句一起使用来获取两个整数中的最大者。

// return_statement2.cpp
#include <stdio.h>

int max ( int a, int b )
{
  return ( a > b ? a : b );
}

int main()
{
  int nOne = 5;
  int nTwo = 7;

  printf_s("\n%d is bigger\n", max( nOne, nTwo ));
}

goto 语句

goto 语句无条件地将控制权转移给由指定的标识符标记的语句。
语法

goto identifier;

备注
由 identifier 指定的标记语句必须位于当前函数中。所有 identifier 名称都是内部命名空间的成员,因此不会干扰其他标识符。
语句标签仅对 goto 语句有意义;其它情况下,语句标签将被忽略。不能重新声明标签。
尽可能使用 break、continue 和 return 语句而不是 goto 语句是一种好的编程风格。但是,因为 break 语句仅退出循环的一个级别,所以可能必须使用 goto 语句退出深度嵌套的循环。

在此示例中,当 i 等于 3 时,goto 语句将控制权转移给标记为 stop 的点。

// goto_statement.cpp
#include <stdio.h>
int main()
{
  int i, j;

  for ( i = 0; i < 10; i++ )
  {
    printf_s( "Outer loop executing. i = %d\n", i );
    for ( j = 0; j < 2; j++ )
    {
      printf_s( " Inner loop executing. j = %d\n", j );
      if ( i == 3 )
        goto stop;
    }
  }

  // This message does not print: 
  printf_s( "Loop exited. i = %d\n", i );

  stop: 
  printf_s( "Jumped to stop. i = %d\n", i );
}

输出:

正在执行外部循环。i = 0
 正在执行内部循环。j = 0
 正在执行内部循环。j = 1
正在执行外部循环。i = 1
 正在执行内部循环。j = 0
 正在执行内部循环。j = 1
正在执行外部循环。i = 2
 正在执行内部循环。j = 0
 正在执行内部循环。j = 1
正在执行外部循环。i = 3
 正在执行内部循环。j = 0
跳转以停止。i = 3

控制的转移
可以在 goto 语句中使用 语句或 switchcase 标签来指定分支超出初始值设定项的程序。此类代码是非法的,除非包含初始值设定项的声明在跳转语句发生的块所封闭的块中。
下面的示例显示了声明和初始化对象 total、ch 和 i 的循环。也存在将控制权传递过初始值设定项的错误 goto 语句。

// transfers_of_control.cpp
// compile with: /W1
// Read input until a nonnumeric character is entered.
int main()
{
  char MyArray[5] = {'2','2','a','c'};
  int i = 0;
  while( 1 )
  {
   int total = 0;

   char ch = MyArray[i++];

   if ( ch >= '0' && ch <= '9' )
   {
     goto Label1;

     int i = ch - '0';
   Label1:
     total += i;  // C4700: transfers past initialization of i.
   } // i would be destroyed here if goto error were not present
  else
   // Break statement transfers control out of loop,
   // destroying total and ch.
   break;
  }
}

在前面的示例中,goto 语句尝试将控制权传递过 i 的初始化。但是,如果已声明但未初始化 i,则该传递是合法的。
在用作 total 语句的 chstatement 的块中声明的对象 和 while 在使用 break 语句退出此块时将被销毁。

您可能感兴趣的文章:

相关文章

  • C++开发绘制正弦曲线的方法

    C++开发绘制正弦曲线的方法

    这篇文章主要为大家详细介绍了C++绘制正弦曲线的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • 用C++实现SLR语法分析程序

    用C++实现SLR语法分析程序

    大家好,本篇文章主要讲的是用C++实现SLR语法分析程序,感兴趣的同学赶紧来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • c语言实现一个简单日历

    c语言实现一个简单日历

    本文给大家分享的是一则使用C语言来实现的一个简单日历的代码,根据项目需求,实现了3个简单的小功能,推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03
  • C语言中操作密码文件的一些函数总结

    C语言中操作密码文件的一些函数总结

    这篇文章主要介绍了C语言中操作密码文件的一些函数总结,包括setpwent()函数和getpwent()函数以及endpwent()函数,需要的朋友可以参考下
    2015-08-08
  • C++中vector容器使用详细说明

    C++中vector容器使用详细说明

    在c++中,vector是一个十分有用的容器,下面通过本文给大家介绍C++中vector容器使用详细说明,需要的朋友可以参考下
    2016-10-10
  • OpenCV 图像拼接和图像融合的实现

    OpenCV 图像拼接和图像融合的实现

    本文主要介绍了OpenCV 图像拼接和图像融合,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • C语言位图算法详解

    C语言位图算法详解

    这篇文章主要介绍了C语言实现的位图算法,主要包括了位图算法的定义与应用,对于C程序算法设计的学习有一定的借鉴价值,需要的朋友可以参考下
    2014-09-09
  • Cocos2d-x 3.x入门教程(二):Node节点类

    Cocos2d-x 3.x入门教程(二):Node节点类

    这篇文章主要介绍了Cocos2d-x 3.x入门教程(二):Node节点类,本文对Node节点类做了一个简明讲解及Node类提供的函数做了说明,需要的朋友可以参考下
    2014-11-11
  • C语言实现俄罗斯方块

    C语言实现俄罗斯方块

    这篇文章主要为大家详细介绍了C语言实现俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • C++左值和右值学习笔记

    C++左值和右值学习笔记

    这篇文章主要为大家介绍了C++左值和右值学习笔记的重点讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论