'Restructuring of an if
Can you help me rearrange this code? cLion suggests a warning to the accolade of the first if [Clang-Ti dy: Repeated branch in conditional chain], I do not understand why. P.S I try to compare 2 calendar dates, to later set the maximum date and the minimum date.(d - day, m - mounth and y - year).
if (d1.y < d2.y) {
return -1;
} else if (d1.y == d2.y && d1.m < d2.m) {
return -1;
} else if (d1.y == d2.y) {
if (d1.m == d2.m) {
if (d1.d < d2.d) {
return -1;
}
}
} else {
return 1;
}
return 0;
Solution 1:[1]
There are numerous ways to write this code. Here is one that attempts to show the comparisons clearly:
// If years differ, return comparison based on that.
if (d1.y < d2.y)
return -1;
else if (d1.y > d2.y)
return +1;
// Otherwise, if months differ, return comparison based on that.
else if (d1.m < d2.m)
return -1;
else if (d1.m > d2.m)
return +1;
// Otherwise, if days differ, return comparison based on that.
else if (d1.d < d2.d)
return -1;
else if (d1.d > d2.d)
return +1;
// Otherwise, all components are equal, so return equality.
else
return 0;
Solution 2:[2]
If I had to guess, your d1 and d2 objects are "dates". Hence, the members, y (year), m (month), and d (day). And your comparison logic seems to test if d1 is a later date than d2. I'm guessing for a sort routine like qsort.
Hence, a quick conversion to integer might be cleaner.
long date1 = (d1.y << 16) | (d1.m << 8) | (d1.d);
long date2 = (d2.y << 16) | (d2.m << 8) | (d2.d);
Then you can test like this:
if (date1 == date2) return 0;
if (date1 > date2) return 1;
return -1;
But wait for it... you can even avoid if statements like this by returning a mixed algebraic and boolean statement:
return (date1 > date2)*1 + (date1 < date2) * (-1);
But if this is for a qsort like comparison function where you can return anything greater than 0 for d1>d2, and anything less than zero for d1<d2, then you can simply say this:
return date1-date2;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Eric Postpischil |
| Solution 2 |
