检查两个变量是否符合相同条件

时间:2014-08-04 13:47:01

标签: c if-statement

我想根据相同的限制检查不同的变量。我怎么能优雅地把这个?

请不要说if(i>8 && j>8)。我知道,但我对两个变量都有更多的条件,比如

if(i,j>8 || i,j<0)

如何去做?我必须写出4个条件吗?

3 个答案:

答案 0 :(得分:1)

你必须写出所有条件。唯一的另一种选择是使用很多else-if,我不会推荐。

如果你真的想隐藏条件逻辑,你可以创建一个函数(我想让代码更具可读性吗?),如下所示:

bool checkTheValues(int i, int j, int k /*etc*/)
{
    if((i>8&&j>8)||j<i /*or whatever*/)
        return true
    return false;
}

然后:

if(checkTheValues(i, j, k))
{
   //do something
}

答案 1 :(得分:0)

#define Less(i, j, n) (i<n && j<n)
#define More(i, j, n) (i>n && j>n)

int main()
{
   if(More(i, j, 8) || Less(i, j, 0))
      // Do stuff
}

您可以推断上面的示例以适合您想要的任何内容

答案 2 :(得分:0)

使用提升宏

#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/tuple/to_seq.hpp>
#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/control/if.hpp>

#define F(r, data, i, elem) BOOST_PP_IF(i, BOOST_PP_TUPLE_ELEM(2, 0, data), ) (elem BOOST_PP_TUPLE_ELEM(2, 1, data))
#define all(cond, ...) (BOOST_PP_SEQ_FOR_EACH_I(F, (&&, cond) , BOOST_PP_TUPLE_TO_SEQ((__VA_ARGS__)) ))

if(all(>8, i, j) || all(<0, i, j))//expand to if(( (i  >8) && (j  >8)  ) || ( (i  <0) && (j  <0)  ))