If statement 如何修改if条件
抱歉有点含糊不清,这是一个与编码相关的小疑问,但我不知道如何尽可能简单地编码它 以下是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 (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确实为真。仅供参考。