相关疑难解决方法(0)

未定义的行为和序列点

什么是"序列点"?

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

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

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

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

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

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

为什么这些构造使用前后增量未定义的行为?

#include <stdio.h>

int main(void)
{
   int i = 0;
   i = i++ + ++i;
   printf("%d\n", i); // 3

   i = 1;
   i = (i++);
   printf("%d\n", i); // 2 Should be 1, no ?

   volatile int u = 0;
   u = u++ + ++u;
   printf("%d\n", u); // 1

   u = 1;
   u = (u++);
   printf("%d\n", u); // 2 Should also be one, no ?

   register int v = 0;
   v = v++ + ++v;
   printf("%d\n", v); // 3 (Should be the …
Run Code Online (Sandbox Code Playgroud)

c increment operator-precedence undefined-behavior sequence-points

793
推荐指数
13
解决办法
7万
查看次数

编译器如何知道函数调用中的逗号不是逗号运算符?

考虑函数调用(调用int sum(int, int))

printf("%d", sum(a,b));
Run Code Online (Sandbox Code Playgroud)

编译器如何确定,函数调用中使用的函数sum(int, int)不是逗号运算符?

注意:我不想在函数调用中实际使用逗号运算符.我只是想知道编译器如何知道它不是逗号运算符.

c compiler-construction function comma-operator

37
推荐指数
5
解决办法
2830
查看次数

什么是C++中的标量对象?

据我所知,基本类型是Scalar和Arrays是聚合的,但是用户定义的类型呢?我将以什么标准将它们分为两类?

struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;
Run Code Online (Sandbox Code Playgroud)

c++ theory types

26
推荐指数
3
解决办法
2万
查看次数

如何在c中检查该行为是否未定义?

我知道以下是未定义的,因为我试图在同一个表达式中读取和写入变量的值,即

int a=5;
a=a++;
Run Code Online (Sandbox Code Playgroud)

但如果是这样,那么为什么以下代码片段未定义

int a=5;
a=a+1;
Run Code Online (Sandbox Code Playgroud)

在这里我也试图修改它的值a并同时写入它.

还解释了为什么标准没有解决这个问题或者删除这个未定义的行为,尽管事实上他们知道它是未定义的?

c undefined-behavior sequence-points

7
推荐指数
3
解决办法
744
查看次数

为什么`x--> 0`不是未定义的行为,而`x = x - `是?

众所周知,这通过零循环:

while (x-- > 0) { /* also known as x --> 0 */
  printf("x = %d\n", x);
}
Run Code Online (Sandbox Code Playgroud)

x = x--产生未定义的行为.


这两个例子都需要一些'返回'值x--,我猜不到.如何x-- > 0定义但x = x--不是?

c operators decrement

3
推荐指数
2
解决办法
1720
查看次数