6.8.5 迭代语句

语法

1、iteration-statement:

while    (    expression    )    statement

do    statement    while    (    expression    )    ;

for    (    expressionopt    ;    expressionopt     ;    expressionopt   )    statement

for    (    declaration    ;    expressionopt    ;    expressionopt    )    statement

约束

2、一个迭代语句的控制表达式应该具有标量类型。

3、一条for语句的声明部分应该仅为具有autoregister存储类的对象声明标识符。

语义

4、一条迭代语句引发一条被称为循环体的语句重复执行,直到控制表达式比较结果等于0。无论循环体是否从迭代语句还是通过一条跳转语句进入,重复都会发生。[注:被跳过的代码不被执行。特别地,一条forwhile语句的控制表达式在进入循环体之前不被计算,也不是一条for语句的clause-1。]

5、一条迭代语句是一个语句块,其作用域是其封闭语句块作用域的严格子集。循环体也是一个语句块,其作用域是迭代语句迭代语句作用域的一个严格子集。

6、对于其控制表达式不是一个常量表达式的一条迭代语句[注:一个省略的控制表达式用一个非零常量代替,它是一个常量表达式。],如果它不执行输入/输出操作,在其循环体内不访问volatile对象,并且不执行同步或原子操作,控制表达式,或(在for语句的情况下)其expression-3,可以通过对终结符的实现来占位。[注:此目的在于允许编译器翻译诸如对空循环的移除,甚至当终止不能被证明时。]

6.8.5.1 while语句

1、控制表达式的计算在循环体的每次执行之前发生。

6.8.5.2 do语句

1、控制表达式的计算在循环体的每次执行之后发生。

6.8.5.3 for语句

1、语句    for  (  clause-1  ;  expression-2  ;  expression-3  )  statement

行为如下:表达式expression-2是控制表达式,它在循环体的每次执行之前被计算。表达式expression-3作为一个void表达式,在循环体的每次执行之后被计算。如果clause-1是一个声明,那么它所声明的任一标识符的作用域是该声明的剩余部分以及整个循环体,包括其它两个表达式;在控制表达式的第一个计算之前,它以执行次序到达。如果clause-1是一个表达式,那么它在控制表达式的第一次计算之前,作为一个void表达式被计算。

2、clause-1expression-3都可以被省略。如果省略expression-2,那么它用一个非零常量来代替。[译者注:即控制表达式的条件永远是真。]

ISO/IEC 9899:2011 条款6.8.5——迭代语句的更多相关文章

  1. ISO/IEC 9899:2011 条款6.8.4——选择语句

    6.8.4 选择语句 语法 1.selection-statement: if    (    expression    )    statement if    (    expression   ...

  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 条款6.8.6——跳转语句

    6.8.6 跳转语句 语法 1.jump-statement: goto    identifier    ; continue    ; break    ; return    expressio ...

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

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

随机推荐

  1. 为什么引入Memcached?

    刚memcached了解学习,一直是处于一个懵懂的状态,先是对memcached进行了一个了解,但我们为什么要在ITOO中引入memcached呢?当问我的时候当时自己脑子中打了一个大大的 这就必须去 ...

  2. MyEclipse激活代码

    package TestCase; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...

  3. python的拷贝方式以及深拷贝,浅拷贝详解

    python的拷贝方法有:切片方法, 工厂方法, 深拷贝方法, 浅拷贝方法等. 几种方法都可以实现拷贝操作, 具体区别在于两点:1.代码写法不同. 2.内存地址引用不同 代码演示: import co ...

  4. python - 栈与队列(只有代码)

    1. 栈: - 后进先出 class Stack(object): def __init__(self): self.stack = [] def peek(self): return self.st ...

  5. char[] byte[] string

    C#  byte 和 char 可以认为是等价的.但是在文本显示的时候有差异. char 占两个字节,unicode字符 1.内存转换: char转化为byte: public static byte ...

  6. Tensorflow细节-P160-迁移学习

    这是一个完整的程序,值得保存 1.对图片进行预处理并保存 import glob import os.path import numpy as np import tensorflow as tf f ...

  7. Java中装箱和拆箱的代码

    建议使用1.5或以上的jdk运行, //装箱  值类型到引用类型  int i = 10;  Object object =i;  System.out.println(object);      / ...

  8. JS AJAX和JSONP的基础功能封装以及使用示例;

    1.代码: function ajax(options){ options = options || {}; options.type = options.type || "get" ...

  9. 洛谷 P1005 动态规划 大数

    Problem Description 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n×m的矩阵,矩阵中的每个元素a(i,j)均为非负整数.游戏规则如下: 1 每次取数时须从每行各取走一个元素,共 ...

  10. learning java BigDecimal类

    使用BiDecimal类是了为防止运算时精度丢失: var f1 = new BigDecimal("0.05"); var f2 = BigDecimal.valueOf(0.0 ...