1

我正在浏览别人的代码,但我无法获得以下语法

c = x<0 ? x = -x,'L':'R';

if(x) x--,putchar(c);

按照语义,很明显,在第一个中,变量 c 被分配了“L”或“R”。在第二个中,x-- 和 putchar() 都被执行。但是逗号运算符在这里的作用到底是什么?

4

3 回答 3

5

但是逗号运算符在这里的作用究竟是什么?

在这种情况下,代码混淆。最初的开发者可能认为他们很聪明。

逗号运算符允许您在单个语句中执行多个操作,但使用 2 个语句几乎总是更好。在这些情况下,它扩展为:

if( x < 0 ) {
    x = -x;
    c = 'L';
} else {
    c = 'R';
}

if(x) {
    x--;
    putchar(c);
}
于 2013-05-23T22:20:17.250 回答
5

逗号运算符计算两个表达式,并返回最后一个的值。

  • 第一个表达式在一个语句中做了两件事。如果选择 'L' 或 'R' 并且如果选择了 'L' 也将 x 设置为负数。
  • 第二个表达式('if' 之后的部分)递减 x,然后放入一个字符。如果没有更多的上下文,这意味着不清楚。

两者的可读性可以通过使用单独的语句而不是逗号运算符来提高。第一个尝试将if语句硬塞到条件表达式中。但是第二个已经使用了一个if语句,所以还不清楚为什么选择逗号运算符。

于 2013-05-23T22:17:34.303 回答
2

逗号运算符在该上下文中的作用是允许使用条件运算符并将赋值作为表达式之一的评估的一部分。

在我看来,这只是一种可怕的风格。一个if语句会更好地传达该代码的意图,并且几乎不会降低效率。

于 2013-05-23T22:18:33.973 回答