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. S3cmd

    一:安装方法 #wget http://nchc.dl.sourceforge.net/project/s3tools/s3cmd/1.0.0/s3cmd-1.0.0.tar.gz #tar -zxf ...

  2. 基于Java+Selenium的WebUI自动化测试框架(十二)-----读取Excel文件(POI)(2)

    上一篇我们讲了怎么利用Java的反射机制,将Excel的读取到的数据,赋值给我们构造函数中定义的变量. 接下来就简单了,我们将实际实现这个读取的简单过程.来看下面一段代码. private stati ...

  3. readme.txt 为什么我们不重视

    1.很多源码项目下面都有编译说明,readme 2.我们的电脑上每个目录都有很多文件,我们似乎可以建立一个readme.txt 知道是什么 节约一些时间

  4. [Exception] java.util.MissingFormatArgumentException

    java.util.MissingFormatArgumentException: Format specifier 's' at java.util.Formatter.format(Formatt ...

  5. 【C语言基础】编码规范

    from:程序员互动联盟 2016-12-28 1. 基本要求  1.1 程序结构清析,简单易懂,单个函数的程序行数不得超过100行.  1.2 打算干什么,要简单,直接了当,代码精简,避免垃圾程序. ...

  6. php 程序执行时间检测

    我们有的时经常需要做程序的执行时间执行效率判断.大理石平台检定规程 实现的思路如下: <?php //记录开始时间 //记录结整时 // 开始时间  减去(-)  结束时间  得到程序的运行时间 ...

  7. Logstash 安装配置使用

    一.Windows下安装运行 官网下载,下载与elasticSearch同一个版本,zip格式.Logstash占用内存较大,我在使用的时候cpu一般都是冲到90% 1.CMD直接运行 创建一个基本的 ...

  8. 在Matlab终止程序后的异常

    有时终止Matlab程序后,其内部指令会执行异常,出现不识别命令函数的情形.我遇到过执行sum命令出错的问题.退出程序,重启后正常.

  9. nodejs新工具-cypress和testcofe的崛起

    今天咨询一个自动化 工具问题,偶然间有人提起了这个可能以后会很火的工具,在此找到一篇很好的参考文章 记录并为以后做准备 cypress和testcofe https://www.jianshu.com ...

  10. Java之ClassLoader基础知识

    ClassLoader基本概念 Java程序并不是一个可执行文件,而是由许多独立的类文件组成的,每一个文件对应一个Java类.这些类文件并非全部装入内存,而是根据程序需要逐渐载入.并且ClassLoa ...