volatile 与序列点

apkipa1 2019-11-15 09:08:40
在对 volatile 对象进行访问操作时会产生副作用, 而且 C 语言中对序列点的 UB 是这么说的:

如果设有 volatile i = 10; 那么这是否意味着如下表达式属于未定义行为?
i++;
i /= 2;
i *= i;
...全文
108 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
apkipa1 2019-11-15
  • 打赏
  • 举报
回复
引用 8 楼 lin5161678 的回复:
[quote=引用 7 楼 apkipa1 的回复:] 不好意思,我发现之前自己有些理解不到位的地方,所以再问一下,是否 i /= 2 不算未定义行为,i = i / 2 就属于未定义行为了。
不 这就是危险的地方了 i/=2 没问题 i = i/2 是未定义行为 惊不惊喜 意不意外[/quote] 懂了,感谢。
lin5161678 2019-11-15
  • 打赏
  • 举报
回复
引用 7 楼 apkipa1 的回复:
不好意思,我发现之前自己有些理解不到位的地方,所以再问一下,是否 i /= 2 不算未定义行为,i = i / 2 就属于未定义行为了。
不 这就是危险的地方了
i/=2 没问题
i = i/2 是未定义行为
惊不惊喜 意不意外
apkipa1 2019-11-15
  • 打赏
  • 举报
回复
引用 6 楼 lin5161678 的回复:
[quote=引用 5 楼 apkipa1 的回复:] [quote=引用 4 楼 lin5161678 的回复:] [quote=引用 楼主 apkipa1 的回复:] 在对 volatile 对象进行访问操作时会产生副作用, 而且 C 语言中对序列点的 UB 是这么说的: 如果设有 volatile i = 10; 那么这是否意味着如下表达式属于未定义行为? i++; i /= 2; i *= i;
i++ 和 i/=2 不是未定义行为 i*=i 是未定义行为 [/quote] 看不出来,能解释一下吗?[/quote] 一次访问 没影响 多次访问 副作用无序[/quote] 不好意思,我发现之前自己有些理解不到位的地方,所以再问一下,是否 i /= 2 不算未定义行为,i = i / 2 就属于未定义行为了。
lin5161678 2019-11-15
  • 打赏
  • 举报
回复
引用 5 楼 apkipa1 的回复:
[quote=引用 4 楼 lin5161678 的回复:]
[quote=引用 楼主 apkipa1 的回复:]
在对 volatile 对象进行访问操作时会产生副作用, 而且 C 语言中对序列点的 UB 是这么说的:

如果设有 volatile i = 10; 那么这是否意味着如下表达式属于未定义行为?
i++;
i /= 2;
i *= i;
i++ 和 i/=2 不是未定义行为
i*=i 是未定义行为
[/quote]
看不出来,能解释一下吗?[/quote]
一次访问 没影响
多次访问 副作用无序
apkipa1 2019-11-15
  • 打赏
  • 举报
回复
引用 4 楼 lin5161678 的回复:
[quote=引用 楼主 apkipa1 的回复:] 在对 volatile 对象进行访问操作时会产生副作用, 而且 C 语言中对序列点的 UB 是这么说的: 如果设有 volatile i = 10; 那么这是否意味着如下表达式属于未定义行为? i++; i /= 2; i *= i;
i++ 和 i/=2 不是未定义行为 i*=i 是未定义行为 [/quote] 看不出来,能解释一下吗?
lin5161678 2019-11-15
  • 打赏
  • 举报
回复
引用 楼主 apkipa1 的回复:
在对 volatile 对象进行访问操作时会产生副作用, 而且 C 语言中对序列点的 UB 是这么说的:

如果设有 volatile i = 10; 那么这是否意味着如下表达式属于未定义行为?
i++;
i /= 2;
i *= i;
i++ 和 i/=2 不是未定义行为
i*=i 是未定义行为
铖邑 2019-11-15
  • 打赏
  • 举报
回复
引用 2 楼 apkipa1的回复:
[quote=引用 1 楼 SuperDay 的回复:] 这不是C++的吗?C语言也支持吗?我真是孤陋寡闻了
是的,C 和 C++ 都有 volatile。[/quote] 受教了。。。。。。。
apkipa1 2019-11-15
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay 的回复:
这不是C++的吗?C语言也支持吗?我真是孤陋寡闻了
是的,C 和 C++ 都有 volatile。
铖邑 2019-11-15
  • 打赏
  • 举报
回复
这不是C++的吗?C语言也支持吗?我真是孤陋寡闻了

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧