相关疑难解决方法(0)

未定义的行为和序列点

什么是"序列点"?

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

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

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

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

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

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

为什么这个程序打印"分叉!" 4次?

为什么这个程序打印"分叉!"4次?

#include <stdio.h>
#include <unistd.h>

int main(void) {

  fork() && (fork() || fork());

  printf("forked!\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c unix linux fork systems-programming

75
推荐指数
6
解决办法
1万
查看次数

逗号运算符的正确用法是什么?

我看到了这段代码:

if (cond) {
    perror("an error occurred"), exit(1);
}
Run Code Online (Sandbox Code Playgroud)

为什么要这么做?为什么不呢:

if (cond) {
    perror("an error occurred");
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

c c++ coding-style comma-operator

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

Why is the return value of the fun function 8 instead of 7?

With reference to Comma-Separated return arguments in C function [duplicate] ,

x=x+2,x+1;
Run Code Online (Sandbox Code Playgroud)

will be evaluated as

x=x+2; 
Run Code Online (Sandbox Code Playgroud)

However, in case of the following code

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

int fun(int x)
{
    return (x=x+2,x+1); //[A]
}

int main()
{
   int x=5;
   x=fun(x);
   printf("%d",x); // Output is 8
}
Run Code Online (Sandbox Code Playgroud)

Shouldn't line [A],be evaluated as

x=x+2;
Run Code Online (Sandbox Code Playgroud)

giving x = 7

c return-value comma

35
推荐指数
4
解决办法
2740
查看次数

在C和C++中,是一个使用逗号运算符的表达式,如"a = b,++ a;" 未定义?

拿这三个C代码片段:

1) a = b + a++
2) a = b + a; a++
3) a = b + a, a++
Run Code Online (Sandbox Code Playgroud)

每个人都知道示例1是非常糟糕的事情,并且明确地调用未定义的行为.例2没有问题.我的问题是关于示例3.逗号运算符在这种表达式中是否像分号一样工作?2和3是等价还是3和1一样未定义?

具体来说,我正在考虑这个问题free(foo), foo = bar.这基本上与上述问题相同.我可以确定foo在重新分配之前被释放,或者这是一个明确的序列点问题吗?

我知道这两个例子都是毫无意义的,只使用分号并完成它就更有意义了.我只是出于好奇而问.

c c++ undefined-behavior

22
推荐指数
2
解决办法
2487
查看次数

改变字典的哈希函数

跟随这个问题,我们知道两个不同的字典,dict_1例如dict_2使用完全相同的哈希函数。

有什么方法可以改变字典使用的哈希函数吗?否定答案也被接受!

python hash dictionary python-2.7 locality-sensitive-hash

5
推荐指数
1
解决办法
2456
查看次数

为了打印"a"的值,内部(a + = 3,5,a)的操作数将如何处理或计算?

代码段是:

int main()
{
     int a = 1, b = 2, c = 3;
     printf("%d", a += (a += 3, 5, a));
}
Run Code Online (Sandbox Code Playgroud)

虽然它在终端中显示8作为输出.但我没有得到它背后的概念.

c undefined-behavior

4
推荐指数
2
解决办法
1265
查看次数

C语言中逗号运算符的行为

如果我使用逗号运算符编写代码,如下所示:

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

它会调用未定义的行为吗?

c comma-operator

0
推荐指数
2
解决办法
102
查看次数

逗号运算符和赋值

考虑一下声明:

int a;
a = 1,2,3; 
cout<<a; // prints a = 1
Run Code Online (Sandbox Code Playgroud)

我咨询了这个网站.现在发生这种情况是因为comma运算符的优先级最低.所以它就像(a=1),2,3.但出于好奇,我想知道在此之后发生了什么,编译器是否忘记了剩下的数字23.因为我认为如果他们被考虑那么可能先是1然后是2然后3将被初始化为a(类似于a = (1,2,3)).请告诉我这里究竟发生了什么?

c++ operators comma comma-operator

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