相关疑难解决方法(0)

未定义的行为和序列点

什么是"序列点"?

未定义的行为和序列点之间的关系是什么?

我经常使用有趣和复杂的表达方式a[++i] = i;,让自己感觉更好.我为什么要停止使用它们?

如果您已阅读此内容,请务必访问后续问题重新加载未定义的行为和序列点.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ c++-faq undefined-behavior sequence-points

970
推荐指数
4
解决办法
10万
查看次数

在哪个版本的C++标准中,"(i + = 10)+ = 10"具有未定义的行为?

在C++中,以下是否有未定义的行为:

int i = 0;
(i+=10)+=10;
Run Code Online (Sandbox Code Playgroud)

C和C++中+ =的结果的答案的评论中有一些争论这里的微妙之处在于默认响应似乎是"是",而正确的答案似乎是"它取决于C++标准的版本".

如果它确实取决于标准的版本,请解释UB的位置和不在的位置.

c++ undefined-behavior language-lawyer c++11 c++03

32
推荐指数
3
解决办法
1760
查看次数

我无法理解C99中的一些句子

在C99 6.5中说:

在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算来修改一次.此外,先前的值应该只读以确定要存储的值

什么"此外,先前的值只能读取以确定要存储的值"是什么意思?在C99中,为什么a[i++] = 1未定义的行为?

c c99 language-lawyer

6
推荐指数
2
解决办法
209
查看次数

C中的后增量和前增量

可能重复:
任何人都可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等...)

下面有一个代码,我在理解代码的逻辑时遇到了一个非常严重的问题.

#include <stdio.h>
#include <stdlib.h>

int main(void )
{
int i = 1 ;
printf("\n%d %d %d %d\n",++i,i++,i++,++i) ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

我在linux发行版下使用名为Mandriva的gcc编译器.在上面提到的我在printf语句中使用了一个变量的pre和post增量.我应该得到的输出是2 2 3 5,但我得到一个不同的输出.请帮我这个代码.

我觉得这段代码很难.

c

3
推荐指数
1
解决办法
505
查看次数