详解C++编程中标记语句与复合语句的写法
标记语句
标签用于将程序控制权直接转交给特定语句。
identifier : statement case constant-expression : statement default : statement
标签的范围为整个函数,已在其中声明该标签。
备注
有三种标记语句。它们全都使用冒号将某种标签与语句隔开。case 和 default 标签特定于 case 语句。
#include <iostream> using namespace std; void test_label(int x) { if (x == 1){ goto label1; } goto label2; label1: cout << "in label1" << endl; return; label2: cout << "in label2" << endl; return; } int main() { test_label(1); // in label1 test_label(2); // in label2 }
goto 语句
源程序中 identifier 标签的外观声明了一个标签。仅 goto 语句可将控制转移到 identifier 标签。以下代码片段阐释了 goto 语句和 identifier 标签的使用:
标签无法独立出现,必须总是附加到语句。如果标签需要独立出现,则必须在标签后放置一个 null 语句。
标签具有函数范围,并且不能在函数中重新声明。但是,相同的名称可用作不同函数中的标签。
// labels_with_goto.cpp // compile with: /EHsc #include <iostream> int main() { using namespace std; goto Test2; cout << "testing" << endl; Test2: cerr << "At Test2 label." << endl; } //Output: At Test2 label.
case 语句
在 case 关键字后显示的标签不能在 switch 语句的外部显示。(此限制也适用于 default 关键字。) 下面的代码片段演示了 case 标签的正确用法:
// Sample Microsoft Windows message processing loop. switch( msg ) { case WM_TIMER: // Process timer event. SetClassWord( hWnd, GCW_HICON, ahIcon[nIcon++] ); ShowWindow( hWnd, SW_SHOWNA ); nIcon %= 14; Yield(); break; case WM_PAINT: memset( &ps, 0x00, sizeof(PAINTSTRUCT) ); hDC = BeginPaint( hWnd, &ps ); EndPaint( hWnd, &ps ); break; default: // This choice is taken for all messages not specifically // covered by a case statement. return DefWindowProc( hWnd, Message, wParam, lParam ); break; }
case 语句中的标签
在 case 关键字后显示的标签不能在 switch 语句的外部显示。(此限制也适用于 default 关键字。) 下面的代码片段演示了 case 标签的正确用法:
// Sample Microsoft Windows message processing loop. switch( msg ) { case WM_TIMER: // Process timer event. SetClassWord( hWnd, GCW_HICON, ahIcon[nIcon++] ); ShowWindow( hWnd, SW_SHOWNA ); nIcon %= 14; Yield(); break; case WM_PAINT: // Obtain a handle to the device context. // BeginPaint will send WM_ERASEBKGND if appropriate. memset( &ps, 0x00, sizeof(PAINTSTRUCT) ); hDC = BeginPaint( hWnd, &ps ); // Inform Windows that painting is complete. EndPaint( hWnd, &ps ); break; case WM_CLOSE: // Close this window and all child windows. KillTimer( hWnd, TIMER1 ); DestroyWindow( hWnd ); if ( hWnd == hWndMain ) PostQuitMessage( 0 ); // Quit the application. break; default: // This choice is taken for all messages not specifically // covered by a case statement. return DefWindowProc( hWnd, Message, wParam, lParam ); break; }
goto 语句中的标签
源程序中 identifier 标签的外观声明了一个标签。仅 goto 语句可将控制转移到 identifier 标签。以下代码片段阐释了 goto 语句和 identifier 标签的使用:
标签无法独立出现,必须总是附加到语句。如果标签需要独立出现,则必须在标签后放置一个 null 语句。
标签具有函数范围,并且不能在函数中重新声明。但是,相同的名称可用作不同函数中的标签。
// labels_with_goto.cpp // compile with: /EHsc #include <iostream> int main() { using namespace std; goto Test2; cout << "testing" << endl; Test2: cerr << "At Test2 label." << endl; // At Test2 label. }
复合语句(块)
复合语句包含封闭在大括号 ({ }) 中的零个或多个语句。可以在任何期望语句出现的位置使用复合语句。复合语句通常称为“块”。
语法
{ [ statement-list ] }
备注
以下示例使用复合语句作为 if 语句的 statement 部分(有关语法的详细信息,请参阅 if 语句):
if( Amount > 100 ) { cout << "Amount was too large to handle\n"; Alert(); } else Balance -= Amount;
注意
由于声明是一个语句,因此声明可以是 statement-list 内的某个语句。因此,复合语句内声明的名称(而不是显式声明为静态的名称)具有局部范围和(对于对象)生存期。
相关文章
- vector是表示可以改变大小的数组的序列容器,本文主要介绍了C++STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-03-06
- 这篇文章主要介绍了C++中取余运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 本篇文章主要介绍了C++中四种加密算法之AES源代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2020-04-25
mysql中获取一天、一周、一月时间数据的各种sql语句写法
创建表:复制代码 代码如下:create table if not exists t( id int, addTime datetime default '0000-00-00 00:00:00′)添加两条初始数据:insert t values(1, '2012-07-12 21:00:00′);insert t values(2, '2012-07...2014-05-31- 整数拆分,指把一个整数分解成若干个整数的和。本文重点给大家介绍C++ 整数拆分方法详解,非常不错,感兴趣的朋友一起学习吧...2020-04-25
- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 这篇文章主要介绍了C++ bitset用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
- 这篇文章主要为大家详细介绍了C++ Eigen库计算矩阵特征值及特征向量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 这篇文章主要介绍了C#条件语句、循环语句(if、while)的用法,学习c#的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C++ pair的用法实例详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了VSCode C++多文件编译的简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
- 虽然C++11引入了智能指针的,但是开发人员在与内存的斗争问题上并没有解放,如果我门实用不当仍然有内存泄漏问题,其中智能指针的循环引用缺陷是最大的问题。下面通过实例代码给大家介绍c++中的循环引用,一起看看吧...2020-04-25
- 这篇文章主要给大家介绍了关于C++随机点名生成器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- map容器是C++ STL中的重要一员,删除map容器中value为指定元素的问题是我们经常与遇到的一个问题,下面这篇文章主要给大家介绍了关于利用C++如何删除map容器中指定值的元素的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
- 这篇文章主要介绍了C++ 约瑟夫环问题案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-15
- 这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25