相关疑难解决方法(0)

如果(a,b,c,d)这是如何工作的?

int main(void)
{
  int a=0, b=20;
  char x=1, y=10;
  if(a,b,x,y)
    printf("bye");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上述代码中的"if"条件如何工作?"y"的值是否仅被"if"视为?

c if-statement

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

A = 3,2,1; 在gcc中给出错误

我在gcc中尝试了以下代码:

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

我希望它能成功编译为:

  • 由逗号分隔的一系列整数表达式将从左到右进行计算,最右侧表达式的值将成为逗号分隔总表达式的值.

那么,整数变量a的值应该是1吗?还是3?

当我尝试执行此程序时,为什么会出现此错误?

错误:预期标识符或'('在数字常量之前

c gcc variable-assignment comma-operator

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

数字中逗号的含义

可能重复:
C++逗号运算符

这可能是一个微不足道的问题,但我不知道答案.这一直困扰着我今天下午.

我只是编写了一个将RVB转换为YUV的函数.没有什么特别的,但错误地使用逗号(,)代替我的数字中的点.

它编译但结果不是我的预期,例如"-3713796"而不是0-255范围编号.

(0,615*(double) 61) - (0,51498*(double) 61) - (0,10001*(double) 61)
Run Code Online (Sandbox Code Playgroud)

那是什么意思呢?
如果它不是编译错误,它可能对某些东西有用,但是什么?

Ps:我在Qt上使用C++.

c++ numbers

4
推荐指数
1
解决办法
152
查看次数

如何在这里使用逗号运算符?

可能重复:
C++逗号运算符
使用C逗号运算符

我不是C++的新手,但这是我第一次看到以下代码:

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

那是C++代码.你能告诉我这里发生了什么吗?变量b如何得到值3?

c++ comma-operator

4
推荐指数
1
解决办法
2302
查看次数

返回括号之间的值列表(10,20,30,40)?

我在Visual Studio 2012中使用C++(而不是C++/CLI).

我不明白为什么这段代码有效,我原本以为它会在编译时失败,但它在运行时甚至都不会失败:

double MyClass::MyMethod() const
{
    //some code here        
    return (10, 20, 30, 40);
}
Run Code Online (Sandbox Code Playgroud)

我错误地制作了这段代码,不是故意的,我在运行单元测试时注意到了这个错误.我很惊讶它有效.当我运行它时,它返回40,列表中的最后一个数字.

有人能解释一下这种语法的含义及其工作原理吗?

c++ comma-operator

4
推荐指数
1
解决办法
488
查看次数

何时使用逗号分隔C++中的两个或多个条件是否合适?

我最近发现这是有效的C++语法:

int bar = 0;
for(int foo = 0; bar = 0, foo != 10; foo++)
{
    //some code
}
Run Code Online (Sandbox Code Playgroud)

我之前从未见过用作两个条件分隔符的逗号,所以我查看它是如何工作的.

我发现在用逗号分隔条件列表时,所有条件都会被执行,但只有最后一个被用作条件.例如:

while(function1(), function2(), function3())
{
    //code
} 
Run Code Online (Sandbox Code Playgroud)

这里,每次循环都会运行function1,function2和function3.但是,只有function3的返回值将用于确定是否保持循环.

我的问题是: 在任何情况下,这是最好的事情吗?

对我来说,这更有意义:

while(function3())
{
    function1();
    function2();

    //some code
} 
Run Code Online (Sandbox Code Playgroud)

何时使用逗号分隔条件是否恰当?

c++ conditional loops comma

4
推荐指数
1
解决办法
234
查看次数

为什么这些示例之一是未定义的行为,而另一个不是?

回复的注释指出,不应使用以下代码,因为它表现出未定义的行为:

int old = (std::cin >> old, old);
Run Code Online (Sandbox Code Playgroud)

类似的代码在这里也受到极大的嘲笑,尤其是对于表现出未定义的行为。

另一方面,这个极受好评的答复建议使用以下代码作为逗号运算符的有用性示例:

while (cin >> str, str != "STOP") {
    //process str
}
Run Code Online (Sandbox Code Playgroud)

我假设如果此代码表现出未定义的行为,则不会被投票。

问题:如果第一个代码是未定义的行为(大概是由于使用了读取结果cin而不检查后者的状态),那么第二个代码为什么没问题?

编辑:第一个示例的评论部分中回答了该问题。第二个示例未显示的是它str的一个实例,std::string因此已初始化。因此,没有未定义的行为。

c++ undefined-behavior

4
推荐指数
1
解决办法
160
查看次数

C:解释if(exit(0),0){}代码行

我正在学习C并且作为练习,我正在尝试编写一个没有任何分号的简单程序.我在替换return 0语句方面遇到了一些麻烦,但我发现这是(唯一的)方法在C:中做到这一点if(exit(0),0){}.

这个陈述究竟是如何运作的?

我知道,exit()stdlib一个void函数,但我不明白是什么,0在部分if作品(其余的我很清楚).

c exit

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

if语句条件中的逗号分隔参数

if如果它只是被忽略,那么在一个陈述中第一个论点的重要性是什么?例如,在:

#include<stdio.h>
main()
{
  if(1,0)
    printf("abc");
  else
    printf("qwe");
}
Run Code Online (Sandbox Code Playgroud)

c if-statement

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

切换案例有两个变量

我在TI的示例代码中看到以下切换情况,我想知道switch参数接收的第二个变量的含义是什么,

__interrupt void Timer_A(void)
{
  switch (TAIV, 10)        // Efficient switch-implementation
  {
    case  2:  break;                        // TACCR1 not used
    case  4:  break;                        // TACCR2 not used
    case 10:  P1OUT ^= 0x01;                // overflow
              break;
  }
}
Run Code Online (Sandbox Code Playgroud)

我的猜测是首先检查案例值"10"是否优先,但我不确定.

c embedded

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