相关疑难解决方法(0)

我=(i,++ i,1)+ 1; 做?

在阅读有关未定义行为和序列点的答案后,我写了一个小程序:

#include <stdio.h>

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

输出是2.天啊,我没有看到减量来了!这里发生了什么?

另外,在编译上面的代码时,我收到一条警告:

px.c:5:8:警告:逗号表达式的左侧操作数无效

  [-Wunused-value]   i = (i, ++i, 1) + 1;
                        ^
Run Code Online (Sandbox Code Playgroud)

为什么?但可能会通过我的第一个问题的答案自动回答.

c expression operators compiler-warnings comma-operator

175
推荐指数
7
解决办法
2万
查看次数

153
推荐指数
5
解决办法
3万
查看次数

c中的逗号运算符

#include<stdio.h> 
int main(void) {
   int a=(1, 2), 3; 
   printf("%d", a);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:2
任何人都可以解释输出是2吗?

c comma-operator

39
推荐指数
2
解决办法
2816
查看次数

C函数中逗号分隔的返回参数

在完成C编程测试时,我得到了一个关于函数的预期输出的问题,该函数似乎返回两个值.其结构如下:

int multi_return_args(void)
{
 return (44,66);
}
Run Code Online (Sandbox Code Playgroud)

这个问题让我感到惊讶并且固有地认为如果可能的话,第一个参数将被传递给调用者.

但在编译之后,结果是66.在快速搜索之后,我找不到任何关于构造这样的return语句的内容,所以想知道是否有些人可以帮助我.

为什么它会像这样,为什么?

c comma-operator

5
推荐指数
2
解决办法
1379
查看次数