If statement 如何修改if条件

If statement 如何修改if条件,if-statement,nested-if,If Statement,Nested If,抱歉有点含糊不清,这是一个与编码相关的小疑问,但我不知道如何尽可能简单地编码它 以下是if条件: if (OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_PORT) || OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_MULTIPORT)|| OF_IS_FLAG_SET(pOfHwData, OF_HW_TUNNEL_PORT)|| OF_IS_FLAG_SET(pOfHw

抱歉有点含糊不清,这是一个与编码相关的小疑问,但我不知道如何尽可能简单地编码它

以下是if条件:

   if (OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_PORT) ||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_MULTIPORT)||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_TUNNEL_PORT)||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_FLOOD)) { /* do something */ }
我想根据另一个X条件,包含另一个
OF_IS_FLAG_SET()
。基本上

if(X) {
if (OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_PORT) ||
             OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_MULTIPORT)||
             OF_IS_FLAG_SET(pOfHwData, OF_HW_TUNNEL_PORT)||
             OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_FLOOD)||
             OF_IS_FLAG_SET(pOfHwData, NEW_FLAG)) { /* do something */ }}
else {
if (OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_PORT) ||
             OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_MULTIPORT)||
             OF_IS_FLAG_SET(pOfHwData, OF_HW_TUNNEL_PORT)||
             OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_FLOOD)) { /* do something */ }
}

但是我不想重新编写完全相同的/*块,做点什么*/。如何根据X是否为真,而不是其他情况,包括设置的新标志(pOfHwData,新标志)。

一种方法是合并常见条件:

if (OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_PORT) ||
    OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_MULTIPORT)||
    OF_IS_FLAG_SET(pOfHwData, OF_HW_TUNNEL_PORT)||
    OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_FLOOD) {
  if(X) {
    if (OF_IS_FLAG_SET(pOfHwData, NEW_FLAG)) {
      /* do something */
    }
  } else {
   /* do something */
  }
}
   bool XisTrue = ((getCompatibilityMode()) ? FALSE : TRUE);

   if (OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_PORT) ||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_MULTIPORT)||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_TUNNEL_PORT)||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_FLOOD)||
         (XisTrue && OF_IS_FLAG_SET(pOfHwData, NEW_FLAG)))

这相当于您问题中的流程

谢谢大家的回答,我没想到会基于\u is\u FLAG\u SET(pOfHwData,NEW\u FLAG)的
产生更多的条件
。基本上,如果X为真,我只想在原始的if条件中包括
OF_IS_FLAG_SET(pOfHwData,NEW_FLAG)

if (OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_PORT) ||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_MULTIPORT)||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_TUNNEL_PORT)||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_FLOOD))
{ 
    if ( X && OF_IS_FLAG_SET(pOfHwData, NEW_FLAG) )
    {
       /* X is true and all the checks are true, including the additional one depending on X */
    }
    else if (!X)
    {
       /* X is not true but all the checks are true */
    }
    else 
    {
       /* X is true but the additional check has failed */
    }

}
else
{
   /* Some check has failed. */
}
   bool XisTrue = ((getCompatibilityMode()) ? FALSE : TRUE);

   if (OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_PORT) ||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_MULTIPORT)||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_TUNNEL_PORT)||
         OF_IS_FLAG_SET(pOfHwData, OF_HW_OUTPUT_FLOOD)||
         (XisTrue && OF_IS_FLAG_SET(pOfHwData, NEW_FLAG)))
getCompatibilityMode()
决定X是否为真。这似乎解决了问题。
如果我遗漏了什么或不够清楚,请告诉我。

if(X)
移动到较大的
if(OF…)
代码块中。然后您只需要执行
if(X)
else
。如果
X
依赖于
NEW\u FLAG
,那么只需检查
如果(X)和OF\u是\u FLAG\u集(pOfHwData,NEW\u FLAG)
。如果((X和OF\u是\u FLAG\u集(/*带有X*/)的标志集(/*没有X*/)的标志集),那么如果CompatibilityMode为false,XisTrue确实为真。仅供参考。