C语言 if条件中的逗号运算符

2w2cym1i  于 2023-10-16  发布在  其他
关注(0)|答案(3)|浏览(299)
int a = 1, b = 0;

if(a, b)
   printf("success\n");
else
   printf("fail\n");

if(b, a)
   printf("success\n");
else
   printf("fail");

这是一个cpp文件,我在Visual Studio 2010中得到的输出为

fail
success

为什么会这样?你能解释一下吗?

eanckbw9

eanckbw91#

http://en.wikipedia.org/wiki/Comma_operator
在C和C++编程语言中,逗号运算符(由标记,表示)是一个二元运算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回此值(和类型)。
在您的第一个if中:

if (a, b)

a首先被求值并被丢弃,b其次被求值并返回0。所以这个条件是假的。
在第二个if中:

if (b, a)

b首先被求值并被丢弃,a其次被求值并返回1。所以这个条件成立。
如果有两个以上的操作数,则返回最后一个表达式。
如果你希望这两个条件都为真,你应该使用&& operator

if (a && b)
jdgnovmf

jdgnovmf2#

这里有一个例子,由维基百科提供,它展示了另一个用例:
逗号可以在条件(if,while,do while或for)中使用,以允许辅助计算,特别是调用函数并使用结果,具有块作用域:
如果(y = f(x),y > x){.//包含x和y的语句}
// See this Wikipedia discussion
许多C程序员都在for语句的初始化器部分遇到过逗号,但在if语句中看到它的人并不多。在上面的例子中,它允许你在if语句测试条件y>x之前初始化y。

ujv3wf0j

ujv3wf0j3#

更好的解释是下面的代码解释:

if (a,b)
{
    c();
}

含义:如果,执行操作a,评估条件B,如果条件B为真,则执行函数c

相关问题