问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言编程中的副作用和序列点是什么意思??求大神回答。

发布网友 发布时间:2022-04-22 20:29

我来回答

1个回答

热心网友 时间:2023-11-04 15:42

C 语言中,术语副作用(side effect)是指对数据对象或者文件的修改。例如,以下语句 var = 99;
的副作用是把 var 的值修改成 99。对表达式求值也可能产生副作用,例如:
se = 100
对这个表达式求值所产生的副作用就是 se 的值被修改成 100。
序列点(sequence point)是指程序运行中的一个特殊的时间点,在该点之前的所有副作用已经结束,并且后续的副作用还没发生。
C 语句结束标志——分号(;)是序列点。也就是说,C 语句中由赋值、自增或者自减等引起的副作用在分号之前必须结束。我们以后会说到一些包含序列点的运算符。任何完整表达式(full expression)运算结束的那个时间点也是序列点。所谓完整表达式,就是说这个表达式不是子表达式。而所谓的子表达式,则是指表达式中的表达式。例如:
f = ++e % 3
这整个表达式就是一个完整表达式。这个表达式中的 ++e、3 和 ++e % 3 都是它的子表达式。
有了序列点的概念,我们下面来分析一下一个很常见的错误:
int x = 1, y;
y = x++ + x++;
这里 y = x++ + x++ 是完整表达式,而 x++ 是它的子表达式。这个完整表达式运算结束的那一点是一个序列点,int x = 1, y; 中的 ; 也是一个序列点。也就是说,x++ + x++ 位于两个序列点之间。标准规定,在两个序列点之间,一个对象所保存的值最多只能被修改一次。但是我们清楚可以看到,上面这个例子中,x 的值在两个序列点之间被修改了两次。这显然是错误的!这段代码在不同的编译器上编译可能会导致 y 的值有所不同。比较常见的结果是 y 的值最后被修改为 2 或者 3。在此,我不打算就这个问题作更深入的分析,各位只要记住这是错误的,别这么用就可以了。有兴趣的话,可以看看以下列出的相关资料。
C 语言标准对副作用和序列点的定义如下:
Accessing a volatile object, modifying an object, modifying a file, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment. Evaluation of an expression may proce side effects. At certain specified points in the execution sequence called sequence points, all side effects of previous evaluations shall be complete and no side effects of subsequent evaluations shall have taken place.
翻译如下:
访问易变对象,修改对象或文件,或者调用包含这些操作的函数都是副作用,它们都会改变执行环境的状态。计算表达式也会引起副作用。执行序列中某些特定的点被称为序列点。在序列点上,该点之前所有运算的副作用都应该结束,并且后继运算的副作用还没发生。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...剧情推向高潮,张卫国会如何拯救自己的中年危机? 如何挽回中年危机男友的话 能否转型成功挽救中年危机 成功挽救中年危机的例子 鸡蛋放多长时间就不能吃了 鸡蛋能放多久不能吃 从大朗汽车站怎么到大朗镇犀牛破管理区元岗路 自己在家做酸菜鱼应该准备什么配料? 在工地做工、讨工资去劳动局、到了公司因为讨工钱、公司竟然打农民工应... 农民工上劳动局讨薪七个月花了2万元l后面公司多打了二千元不退回有什么... 怎么知道鸡蛋有没有坏掉? 为什么之前相册保存的动图不动了 但现在保存的还是动的 华为手机? 请问,什么叫做并发症?后遗症?副作用? GIF图片为什么保存到本地就不动了?? 1、试述副作用、毒性反应、*反应的概念及其各特点。 2、试述新斯的明对骨骼肌的兴奋作用最强的机制。 3 为什么手机保存的动态图都不动了?开始都能看现在却不动,什么原因?系统... 毒性与副作用的含义是什么?两者的区别是什么 为什么华为手机看百度贴吧时GIF格式的动态图不动? 药物的副作用是指? 副作用与毒性反应的区别 为什么华为手机存的gif变快了,怎么让它恢复正常速度啊? 简述什么是副作用,后遗效应,首过消除,安全范围,半衰期,生物利用度... 为什么存到手机里的动图不会动? 副作用的概念 为什么动态图保存到手机就不动了~怎么办? 什么是副作用 nova5pro参数是多少? 华为手机下载的gif图在图库里和微信上无法播放? 什么是副作用?名词解释 手机gif保存后不动怎么办 手机gif图,保存完了就不动了,怎么办? 明明保存的gif图,在手机相册却动不了,什么鬼?? 黄芩片有什么副作用 为什么保存的GIF图片动不了呢 药物不良反应的概念及分型? 为什么我的手机保存不了图片或者GIF动图 ? 药品不良反应概念及包含要素 华为荣耀6视频转的gif存哪个文件了,保存好了怎么找不到 吃了概念180会有副作用吗? 麻药的副作用 小天鹅滚筒洗衣机具体操作方法是什么? 小天鹅十佳洗衣机和小天鹅洗衣机是一家吗? 小天鹅洗衣机的有哪些优势? 小天鹅洗衣机怎么排水? 小天鹅洗衣机如何使用app? 小天鹅洗衣机无法启动是怎么回事? 小天鹅洗衣机质量怎么样? 小天鹅洗衣机有哪些系列? 现在小天鹅洗衣机的生产基地在哪里啊? 小天鹅滚筒洗衣机使用说明? 小天鹅洗衣机怎么与wifi连接?