6.8.4 选择语句

语法

1、selection-statement:

if    (    expression    )    statement

if    (    expression    )    statement    else    statement

switch    (    expression    )    statement

语义

2、一条选择语句在一组语句中选择,依赖于一条控制表达式的值。

3、一条选择语句是一个语句块,其作用域是其封闭语句块的一个严格的子集。每个相关联的子语句也是一个语句块,其作用域是该选择语句作用域的一个严格子集。

6.8.4.1 if语句

约束

1、一条if语句的控制表达式应该具有标量类型。

语义

2、在两种形式下,如果表达式比较不等于0,那么第一个子语句会被执行。在else形式下,如果表达式比较等于0,那么第二条子语句会被执行。如果第一条子语句通过一个标签达到,那么第二条子语句不被执行。

3、一个else在词法上与之前最近的if相关联,如果该if在语法上被允许。

6.8.4.2 switch语句

约束

1、一条switch语句的控制表达式应该具有整数类型。

2、如果一条switch语句具有一个相关联的casedefault标签在一个标识符作用域内,该标识符具有一个可变修改类型,那么整个switch语句应该在此标识符的作用域内。[注:即,该声明要么在switch语句前,要么它跟在最后一条case语句或default标签之后,这些标签与switch相关联,在包含该声明的语句块中。]

3、每个case标签的表达式应该是一个整数常量表达式,并且在同一条switch语句中,任意两个case常量表达式在转换后不应该具有相同值。在一条switch语句中最多可以有一个default标签。(任一封闭的switch语句可以具有一个default标签或case常量表达式,带有复制case常量表达式的值。)

语义

4、一条switch语句使得控制跳转到、或跳入、或跳过switch体的语句,依赖于一个控制表达式的值,以及依赖于是否存在一个default标签以及任何case标签的值。一个casedefault标签仅仅在最近的封闭的switch语句内可访问。

5、整数晋升在控制表达式上执行。在每个case标签上的常量表达式被转换为控制表达式所晋升的类型。如果一个转换后的值匹配被晋升的控制表达式,那么控制跳转到跟在所匹配的case标签后的语句。否则,如果有一个default标签,那么控制跳转到标签语句。如果没有被转换的case常量表达式匹配,并且也没有default标签,那么整个switch体都不被执行。

实现限制

6、正如在5.2.4.1所讨论的,实现可以限制一条switch语句中的case值的个数。

7、例 在以下程序片段中

switch (expo)
{
int i = ;
f(i);
case :
i = ;
/* 直通到default代码 */
default:
printf("%d\n", i);
}

标识符为i的对象,为自动存储周期(在语句块内),但从未被初始化,因而如果控制表达式具有一个非零值,对printf函数的调用将访问一个中间值。类似的,对函数f的调用无法被到达。

ISO/IEC 9899:2011 条款6.8.4——选择语句的更多相关文章

  1. ISO/IEC 9899:2011 条款6.8.5——迭代语句

    6.8.5 迭代语句 语法 1.iteration-statement: while    (    expression    )    statement do    statement    w ...

  2. ISO/IEC 9899:2011 条款6.8.2——标签语句

    6.8.2 复合语句 语法 1.compound-statement: {    block-item-listopt    } block-item-list: block-item block-i ...

  3. ISO/IEC 9899:2011 条款6.8.1——标签语句

    6.8.1 标签语句 语法 1.labeled-statement: identifier    :    statement default    :    statement case    co ...

  4. ISO/IEC 9899:2011 条款3——术语、定义与符号

    3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...

  5. ISO/IEC 9899:2011 条款5——5.2.1 字符集

    5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...

  6. ISO/IEC 9899:2011 条款6.4.2——标识符

    6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier    identifier-nondigit identifie ...

  7. ISO/IEC 9899:2011 条款6.4.3——通用字符名

    6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...

  8. ISO/IEC 9899:2011 条款5——5.1.2 执行环境

    5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...

  9. ISO/IEC 9899:2011 条款4——标准顺从

    4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...

随机推荐

  1. 2019-ACM-CCPC-Online-Contest

    2019-ACM-CCPC-Online-Contest 1.^&^ 题意: ​ 求一个最小的正整数\(C\),使得\((A\oplus C) \&(B\oplus C)\)最小. 思 ...

  2. [转]Python测试框架对比----unittest, pytest, nose, robot framework对比

      测试框架 什么是框架? 框架(Framework)是整个或部分系统的可重用设计,框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求 ...

  3. linux网络编程之socket编程(四)

    经过两周的等待,终于可以回归我正常的学习之旅了,表哥来北京了在我这暂住,晚上回家了基本在和他聊天,周末带他在北京城到处乱转,几乎剥夺了我自由学习的时间了,不过,亲人之情还是很难得的,工作学习并不是生活 ...

  4. gdb调试(一)

    对于gdb是什么,这里就不多说了,只要是程序员一般都听说过,像java开发会用到集成开发工具eclipse,里面调试起来非常方便,全是可视化的,但是如果在linux下编写的c程序,用可视化的调试就没这 ...

  5. flask基础2

    一个装饰器无法装饰多个函数的解决方法 当我们想在flask的多个视图函数前添加同一个装饰器时,如果什么都不做会报一个错 AssertionError: View function mapping is ...

  6. 【OI备忘录】trick汇总帖

    OI中的那些实用的小trick 在OI中,我们时常会用到一些小技巧,无论是代码方面还是数学方面抑或是卡常,都有很多不错的小技巧. 鄙人不才,往往没办法想出来,于是就有了这篇汇总帖~ 如有疏漏,还请da ...

  7. jsp文件上传下载组件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  8. codevs:1313 质因数分解:已知正整数 n是两个不同的质数的乘积,试求出较大的那个质数 。

    #include<iostream>#include<cstdio>#include<cmath>using namespace std;int a[2];int ...

  9. UOJ73 【WC2015】未来程序

    题目描述:给出输入和暴力程序,求输出.共10个测试点. 测试点1: 输入\(a,b,c\),求\(a\times b \ \mathrm{mod} \ c\) \(a,b,c\)属于long long ...

  10. FCS省选模拟赛 Day7

    Description  Solution T1 island 考虑把问题成两部分计算 纵坐标的距离和很好计算,在输入的同时一次计算了就完事 横坐标又分成两部分 分别在\(y\)轴不同侧的矩形的距离和 ...