语句组成了C的基本程序的步骤,大多数语句由表达式构造而成
一、表达式
表达式(expression)由运算符和操作数组合构成
操作数是运算符操作的对象,可以是常量、变量或二者的组合
C的一个重要属性:每一个C表达式都有一个值
一些表达式是多个较小的表达式的组合,这些小的表达式被称为子表达式
二、语句
语句(statement)是构造程序的基本成分
程序(program)是一系列带有某种必需的标点的语句集合
一个语句是一条完整的计算机指令
在C中,语句用结束处的一个分号标识
sum = a + b // 只是一个表达式
sum = a + b; // 是一个语句
C将任何后面加有一个分号的表达式看做是一个语句(称为表达式语句)
一个语句是一条完整的指令,但不是所有的完整的指令都是语句,例:
sum = a + (b = c); // b = c是一个完整的指令,但只是一个语句的一部分
常见的4种语句:
#include <stdio.h>
int main(void)
{
int i, sum; // 声明语句
i = 0; // 赋值语句
while(i++ < 10)// while语句
{
sum += i; // 赋值语句
}
printf("sum = %d \n", sum); // 函数语句
return 0;
}
声明语句(declaration statement):用于建立变量的名字、类型并为其分配存储空间;一个声明语句不是一个表达式语句
赋值语句(assignment statement):为一个变量分配一个值;赋值语句是表达式语句
函数语句(function statement):引起函数的执行
结构化语句(structured statement):while语句属于其中一种,其结构比一般的语句(如赋值语句)复杂
运行结果:
副作用(side effect):对数据对象或文件的修改
num = 1; // 语句的副作用是将变量num的值设置为1
顺序点(sequence point):程序执行中的一个点,在该点,所有的副作用都在进入下一步前被计算;C语句中,分号标志了一个顺序点;任何一个完整的表达式的结束也是一个顺序点
完整的表达式(full expression):不是一个更大的表达式的子表达式(一个表达式语句中的表达式、一个while循环中作为判断条件的表达式都是完整的表达式)
示例1:
while(i++ < 10) // i++ < 10是while循环的判断条件,因此是完整表达式
// 该表达式的结束就是一个顺序点
// C保证副作用(增加i的值)在程序进入后续语句前发生
// 使用后缀形式保证i在与10比较之后再增加
示例2:
sum = (1 + i++) + i++; // 表达式1 + i++不是一个完整表达式
// 所以C不能保证在计算子表达式1 + i++之后立即增加i
// 整个赋值语句是完整表达式
// C能保证的是在程序进入后续语句前i被增加2次
// C没有指明i是在每个子表达式被计算后增加还是在整个表达式被计算后增加
// 所以要避免使用此类语句
三、复合语句
复合语句(compound statement):使用花括号组织起来的两个或更多的语句;也被称为一个代码块(block)
整个复合语句被认为是一个语句