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

 

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

在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 @   宋桓公  阅读(1378)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2015-01-08 【原创】指针与实例的问题
2015-01-08 【原创】两种封装思维的讨论
点击右上角即可分享
微信分享提示