编程语法分析之从表达式说起

 

表达式,一般有操作数和操作符组成。要问表达式和语句的区别,百度截取的一个回答:

在c语言中,分号“;”是语句结束的标志,就相当于中文中的句号。表示一条语句的结束。反过来,“;"是语句的象征,本身 ";"就表示一条语句,称为空语句,一般用于占位。比如while (1)  ; ;

第1个分号表示的是空语句,第2个分号表示的是语句结束符。主要区分表达式和语句的区别,在C语言中带分号的就是语句,不带分号的即为表达式。

而在Accelerated C++ 一书中说到:“当一个表达式后面紧跟一个分号时,就表明系统让我们丢掉这个返回值 ”见第《Accelerated C++》0章的第7节。

 

也就是说,表达式从宏观上讲具体两大作用:

1、表达式一定会返回一个值!(有且只有一个值)

2、整个表达式在计算时产生的变化。这个作用往往别称之为表达式的副作用!

 

   于是我想了到宏,宏就没有分号,如:带参数的宏还能像函数一样返回一个值!结合表达式的第一个作用就很好理解了。

还有在if判断里也是(没有分号的)表达式,如if(1+(a = b -1))这个表达式看起来奇葩,但是也是符合语法的。a = b - 1就是一个表达式,他其实就一个值!只不过这个表达式的返回值和a的值是一致的。所以很多复杂的表达式如果你将其看成一个值,就会简化不少。当然如何看,必须结合“优先级”以及“结合律”来看了。具体内容请看下节,《编程语法分析之“优先级”和“结合律”》。

 

再联想一下函数,函数分为有返回值和没有返回值的函数。

一、有返回值的函数和“表达式”一样,有两大作用:

1、有返回值的函数一定会返回一个值!(有且只有一个值)

2、整个函数内容在计算时产生的变化。

二、没有返回值的函数就好比“语句”不在结果,而在乎过程中发生的变化。

 

 

我在百度上找到一个回答,深以为然:

wpsA157.tmp

于是乎,有了一点感悟:(题外话)

一个问题想不通,无外乎两点:

1、没有认清本质

2、需要根据条件,分类讨论(总有例外)

posted @ 2016-01-08 16:58  宋桓公  阅读(1374)  评论(0编辑  收藏  举报