5.4.1 表达式

  • expression
  • subexpression

每个表达式都有一个值

image.png

5.4.2 语句

  • statement
  • C 程序的基本构建块
  • 一条语句相当于一条完整的计算机指令
  1. legs = 4;

空语句:

  1. ;

表达式语句:

  • 什么都不做
  1. 8;
  2. 3 + 4;

并不是所有的指令都是语句:

  1. x = 6 + (y = 5);

常见语句:

image.png

  • 声明注释表达式语句
  • 去掉 ; 后也不是表达式

其它语句:

  • 赋值表达式语句
  1. sum = sum + count;
  • 函数表达式语句
    • 引起函数调用
  1. printf(xxx);
  • 复合语句
  1. {
  2. xxx;
  3. yyy;
  4. }

image.png

  • 结构化语句
    • while

副作用和序列点

side effect

  • 副作用是对数据对象或文件的修改
  1. states = 50;
  • 主作用: 对表达式求值

sequence point

  • 程序执行的点
  • 在该点上, 所有的副作用都在进入下一步之前发生
  • ; 标记了一个序列点
  • 任何一个完整表达式的结束也是一个序列点
    • 完整表达式 (full expression): 这个表达式不是另一个更大表达式的子表达式
  • 有助于分析后缀递增何时发生
  1. while (guests++ < 10)
  2. printf("%d \n", guests);

在该代码中, guests 与10比较结束后, guests 的值+1, 而不是在 printf 执行后.

结合副作用和序列点来说明:

guests++ < 10 是一个完整表达式, 其主作用是 guests < 10 , 副作用是 guests++ , 在完整表达式结束之前进行副作用.

5.4.3 复合语句 (块)

compound statement

  • 用花括号括起来的一条或多条语句
  • 也成为块 (block)

image.png

image.png