在您的例子中,绝对没有必要使用任何
else
,因为
return
,程序流无论如何都无法继续。
我应该这样写比较函数:
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;
}
,可以通过连续的
else if
比如:
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;
}
就我们而言,
compareValues
int
但你明白了。