C语言中如何处理序列点操作符的问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1713个文字,预计阅读时间需要7分钟。
C语言序列点问题:C语言副作作用:+(side effect)+表示对堆栈书局对象或文件的修改。例如,语句v+=99的副作作用是改变v的值为99。C语言序列点:+(sequence point)+表示程序执行中的一个特殊时间点。
c语言序列点问题 c语言副作用:(side effect) 是指堆书局对象或者文件的修改。
例如语句 v = 99;的副作用是把v的值改成99。
c语言序列点:(sequence point) 是指程序运行中的一个特殊的时间点,在该点之前的所有副作用已经结束,并且后续的副作用还没发生,而两个序列点之间所有的表达式或代码执行顺序是未定义的。
(1)、一个重要的序列点在完整表达式的结尾(即分号),所谓完整表达式,就是说这个表达 式不是子表达式。而所谓的子表达式,则是指表达式中的表达式。也就是说,C 语句中由 赋值、自增或者自减等引起的副作用在分号(序列点)之前必须结束。
例如: a= ++b % 3; 这整个表达式就是一个完整表达式。这个表达式中的 ++b、3 和 ++b % 3 都是它的子 表达式
有了序列点的概念,我们下面来分析一下一个很常见的错误:
int x = 1, y;
y = x++ + x++;
/*
这里 y = x++ + x++ 是完整表达式,而 x++ 是它的子表达式。这个完整表达式运算结束的那一点是一个序列点,int x = 1, y; 中的 ; 也是一个序列点。也就是说,x++ + x++ 位于两个序列点之间。C 标准规定,在两个序列点之间,一个对象所保存的值最多只能被修改一次。但是我们清楚可以看到,上面这个例子中,x 的值在两个序列点之间被修改了两次。
本文共计1713个文字,预计阅读时间需要7分钟。
C语言序列点问题:C语言副作作用:+(side effect)+表示对堆栈书局对象或文件的修改。例如,语句v+=99的副作作用是改变v的值为99。C语言序列点:+(sequence point)+表示程序执行中的一个特殊时间点。
c语言序列点问题 c语言副作用:(side effect) 是指堆书局对象或者文件的修改。
例如语句 v = 99;的副作用是把v的值改成99。
c语言序列点:(sequence point) 是指程序运行中的一个特殊的时间点,在该点之前的所有副作用已经结束,并且后续的副作用还没发生,而两个序列点之间所有的表达式或代码执行顺序是未定义的。
(1)、一个重要的序列点在完整表达式的结尾(即分号),所谓完整表达式,就是说这个表达 式不是子表达式。而所谓的子表达式,则是指表达式中的表达式。也就是说,C 语句中由 赋值、自增或者自减等引起的副作用在分号(序列点)之前必须结束。
例如: a= ++b % 3; 这整个表达式就是一个完整表达式。这个表达式中的 ++b、3 和 ++b % 3 都是它的子 表达式
有了序列点的概念,我们下面来分析一下一个很常见的错误:
int x = 1, y;
y = x++ + x++;
/*
这里 y = x++ + x++ 是完整表达式,而 x++ 是它的子表达式。这个完整表达式运算结束的那一点是一个序列点,int x = 1, y; 中的 ; 也是一个序列点。也就是说,x++ + x++ 位于两个序列点之间。C 标准规定,在两个序列点之间,一个对象所保存的值最多只能被修改一次。但是我们清楚可以看到,上面这个例子中,x 的值在两个序列点之间被修改了两次。

