带有空第二个参数的C条件运算符('?')

Loc*_*eyu 39 c conditional operators ternary-operator

通常是'?' 运算符以下列形式使用:

A ? B : C
Run Code Online (Sandbox Code Playgroud)

然而,在B = AI的情况下,已经看到以下缩写

A ? : C
Run Code Online (Sandbox Code Playgroud)

这令人惊讶地起作用.是否更好地保留第二个参数(样式方式),或者某些编译器是否有机会无法处理它?

Jur*_*obl 36

语言C(据我所知)不允许这样做,但是像gcc这样的编译器有一个快捷方式a?:c作为扩展名. a?:c意思是一样的a?a:c.

  • 这意味着同样的......警告说"a"不包含副作用.`a?:c`只执行一次`a`,而'a?a:c`将执行两次'a`的副作用. (19认同)

Pra*_*rav 16

它是gcc的延伸

具有省略操作数的条件

x ? : y 相当于 x ? x : y

  • @Celada:`x || y`的计算结果为0或1,而这个运算符不是这种情况. (3认同)
  • 您链接的页面与自身相矛盾.一方面它说"这个例子完全等同于`x?x:y`",这意味着`x`被评估两次,但另一方面,最后一段说明`x`只被评估一次,这将使它完全等同于`x || 是的,不是`x?x:y` (2认同)