ISO/IEC 9899:2011 条款6.8.4——选择语句
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语句具有一个相关联的case或default标签在一个标识符作用域内,该标识符具有一个可变修改类型,那么整个switch语句应该在此标识符的作用域内。[注:即,该声明要么在switch语句前,要么它跟在最后一条case语句或default标签之后,这些标签与switch相关联,在包含该声明的语句块中。]
3、每个case标签的表达式应该是一个整数常量表达式,并且在同一条switch语句中,任意两个case常量表达式在转换后不应该具有相同值。在一条switch语句中最多可以有一个default标签。(任一封闭的switch语句可以具有一个default标签或case常量表达式,带有复制case常量表达式的值。)
语义
4、一条switch语句使得控制跳转到、或跳入、或跳过switch体的语句,依赖于一个控制表达式的值,以及依赖于是否存在一个default标签以及任何case标签的值。一个case或default标签仅仅在最近的封闭的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——选择语句的更多相关文章
- ISO/IEC 9899:2011 条款6.8.5——迭代语句
6.8.5 迭代语句 语法 1.iteration-statement: while ( expression ) statement do statement w ...
- ISO/IEC 9899:2011 条款6.8.2——标签语句
6.8.2 复合语句 语法 1.compound-statement: { block-item-listopt } block-item-list: block-item block-i ...
- ISO/IEC 9899:2011 条款6.8.1——标签语句
6.8.1 标签语句 语法 1.labeled-statement: identifier : statement default : statement case co ...
- ISO/IEC 9899:2011 条款3——术语、定义与符号
3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...
- ISO/IEC 9899:2011 条款5——5.2.1 字符集
5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...
- ISO/IEC 9899:2011 条款6.4.2——标识符
6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier identifier-nondigit identifie ...
- ISO/IEC 9899:2011 条款6.4.3——通用字符名
6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...
- ISO/IEC 9899:2011 条款5——5.1.2 执行环境
5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...
- ISO/IEC 9899:2011 条款4——标准顺从
4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...
随机推荐
- 怎样制作一个 Python Egg
from:http://liluo.org/blog/2012/08/how-to-create-python-egg/ 制作打包一个 Python Egg 并部署整个过程还蛮有意思的,下面小教程(这 ...
- 小程序框架之逻辑层App Service
小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发者 JavaScript 代码的运行环境以及微信小程序的特有功能. 逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈. ...
- Run Multiple Webpack Configs Sequentially
https://www.viget.com/articles/run-multiple-webpack-configs-sequentially/ const path = require('path ...
- 【OI备忘录】trick汇总帖
OI中的那些实用的小trick 在OI中,我们时常会用到一些小技巧,无论是代码方面还是数学方面抑或是卡常,都有很多不错的小技巧. 鄙人不才,往往没办法想出来,于是就有了这篇汇总帖~ 如有疏漏,还请da ...
- 《CoderXiaoban》第九次团队作业:Beta冲刺与验收准备2
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验十三 团队作业9:BETA冲刺与团队项目验收 团队名称 Coderxiaoban团队 作业学习目标 (1)掌握软件黑盒 ...
- 十五.ProtoBuf3的基础总结
转自: https://blog.csdn.net/u011518120/article/details/54604615 定义一个消息类型 指定字段类型 分配标识号 指定字段规则 添加更多消息类型 ...
- Mybatis 不支持通配符扫包起别名问题
typeAliasesPackage 默认只能扫描某一个路径下,或以逗号等分割的 几个路径下的内容,不支持通配符和正则,采用重写的方式解决 package com.xxxx.xxx.util.comm ...
- vs2010出现红色波浪错误提示但运行通过
1.环境:xp+VS2010 2.问题:突然发现编辑器里的代码在没有错误的地方提示很多不存在的错误,显示红色波浪线,但能顺利编译运行. 3.解决: 对于32位机来说,先查看注册表: [HKEY_CLA ...
- Leonardo的笔记本LA 3641——置换的乘法
题意 给出26个大写字母的置换 $B$,问是否存在一个置换 $A$,使得 $A^2=B$. 分析 首先,若A=BC,若B和C都能表示成两个相同循环的乘积,则A也能. 因为,不相交的循环的乘积满足交换律 ...
- [React] Write a Custom React Effect Hook
Similar to writing a custom State Hook, we’ll write our own Effect Hook called useStarWarsQuote, whi ...