如何避免在C中嵌套ifs?
我这里有C语言的代码,我希望如何避免在C中嵌套ifs?,c,function,if-statement,struct,nested,C,Function,If Statement,Struct,Nested,我这里有C语言的代码,我希望expCompare没有嵌套的ifs。我想问一下,除了这个,还有别的办法吗 typedef struct expo Exponent; struct expo { char tag; int ex; int ey; int ez; }; int expCompare(Exponent alpha, Exponent beta) { if (alpha.ex > beta.ex) { return 1;
expCompare
没有嵌套的ifs。我想问一下,除了这个,还有别的办法吗
typedef struct expo Exponent;
struct expo {
char tag;
int ex;
int ey;
int ez;
};
int expCompare(Exponent alpha, Exponent beta) {
if (alpha.ex > beta.ex) {
return 1;
} else if (alpha.ex == beta.ex) {
if (alpha.ey > beta.ey) {
return 1;
} else if (alpha.ey == beta.ey) {
if (alpha.ez > beta.ez) {
return 1;
} else if (alpha.ez == beta.ez){
return 0;
} else {
return -1;
}
} else {
return -1;
}
} else {
return -1;
}
}
在您的示例中,绝对不需要使用任何
else
,因为在返回后,程序流无论如何都无法继续
我会这样编写比较函数:
int expCompare(Exponent alpha, Exponent beta) {
if (alpha.ex > beta.ex)
return 1;
if (alpha.ex != beta.ex)
return -1;
if (alpha.ey > beta.ey)
return 1;
if (alpha.ey != beta.ey)
return -1;
if (alpha.ez > beta.ez)
return 1;
if (alpha.ez == beta.ez)
return 0;
return -1;
}
即使没有早期的返回
,如果
类似于:
int expCompare(Exponent alpha, Exponent beta) {
int result = -1;
if (alpha.ex > beta.ex)
result = 1;
else if (alpha.ex != beta.ex)
result = -1;
else if (alpha.ey > beta.ey)
result = 1;
else if (alpha.ey != beta.ey)
result = -1;
else if (alpha.ez > beta.ez)
result = 1;
else if (alpha.ez == beta.ez)
result = 0;
return result;
}
注意,对于比较struct
对象一个接一个字段的特殊用法,我在代码库中编写了一个宏,大大简化了常见模式。事情是这样的:
static int compareValues(int a, int b)
{
if (a > b)
return 1;
if (a < b)
return -1;
return 0;
}
#define COMPARE_VALUES_RETURN_IF_DIFFERENT(a,b) \
do { int result = compareValues((a), (b)); \
if(result) return result; } while(0)
int expCompare(Exponent alpha, Exponent beta) {
COMPARE_VALUES_RETURN_IF_DIFFERENT(alpha.ex, beta.ex);
COMPARE_VALUES_RETURN_IF_DIFFERENT(alpha.ey, beta.ey);
COMPARE_VALUES_RETURN_IF_DIFFERENT(alpha.ez, beta.ez);
return 0;
}
静态整数比较值(整数a、整数b)
{
如果(a>b)
返回1;
if(a
我们的例子中,<代码> CuasReals是C++中的一个重写函数,它可以比较几种类型,不仅是代码> int <代码>,而且你得到了点。
使用逻辑运算符<代码> >((α= Ex=betaβ)和&(alpay.e>β))< /C>