混淆'if'语句

his*_*amp 1 c if-statement

无论如何,下面的声明是什么?

这对我来说很困惑.我很惊讶C允许您在if语句中使用条件运算符.有没有更好的办法?

我发现if声明中的条件运算符太混乱了.我可以尝试使用&&和|| 经营者,但我担心我可能会犯错误.

如何将下面的陈述重写为更简单的形式?

if ( (offset < 0) ?
         ( input->binData.bounds.lo >= (unsigned long)(-offset) ) :
         ( input->binData.bounds.hi < (unsigned long)(-offset) ) )
Run Code Online (Sandbox Code Playgroud)

我在BitHoist开源软件包中找到了这行C代码.

aps*_*ers 5

你可以使用三元运算符的每个分辨率AND的三元条件(offset < 0)和它的相反(offset >= 0):

if ( ((offset < 0) && ( input->binData.bounds.lo >= (unsigned long)(-offset) )) ||
     ((offset >= 0) && ( input->binData.bounds.hi <  (unsigned long)(-offset) )) ) {
Run Code Online (Sandbox Code Playgroud)

  • 您可能还想为(unsigned long)( - offset)和input-> binData.bounds设置临时值以减少重复. (2认同)