C 在相同条件下检查两个变量
我想根据相同的限制检查不同的变量。我怎样才能把它说得优雅呢 如果(i>8&&j>8),请不要说C 在相同条件下检查两个变量,c,if-statement,C,If Statement,我想根据相同的限制检查不同的变量。我怎样才能把它说得优雅呢 如果(i>8&&j>8),请不要说。我知道,但我对这两个变量有更多的条件,比如 if(i,j>8 || i,j<0) if(i,j>8 | | i,j您必须编写所有条件。唯一的替代方法是使用大量else if,我不推荐使用 如果你真的想隐藏条件逻辑,你可以制作一个函数来实现它(我想是为了让代码更可读?),比如: bool checkTheValues(int i, int j, int k /*etc*/) { i
。我知道,但我对这两个变量有更多的条件,比如
if(i,j>8 || i,j<0)
if(i,j>8 | | i,j您必须编写所有条件。唯一的替代方法是使用大量else if,我不推荐使用
如果你真的想隐藏条件逻辑,你可以制作一个函数来实现它(我想是为了让代码更可读?),比如:
bool checkTheValues(int i, int j, int k /*etc*/)
{
if((i>8&&j>8)||j<i /*or whatever*/)
return true
return false;
}
#定义较少(i,j,n)(in)
int main()
{
if(多(i,j,8)|少(i,j,0))
//做事
}
您可以根据需要推断上述示例使用boost宏
#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) ))
#包括
#包括
#包括
#包括
#定义F(r,data,i,elem)BOOST_PP_IF(i,BOOST_PP_TUPLE_elem(2,0,data))(elem BOOST_PP_TUPLE_elem(2,1,data))
#定义所有(cond,…)(每个(F,(&&,cond)的BOOST_PP_SEQ_,BOOST_PP_TUPLE_TO_SEQ(((&&,cond)))
如果(全部(>8,i,j)| |全部(8)和&(j>8))| |((我喜欢你这样做。没有其他方法。写一种新的语言…你可以编写返回布尔值的特殊函数,但这将更难阅读。你有很多变量需要检查某些属性,还是有很多属性需要检查两个变量?在这两种情况下,如果多为2,就不会有更容易阅读的对。
#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
}
#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) ))