I dont suppose there's any way to do logical and/or in C without coercing the result to 0 or 1?
I.e. `0 || 5` would result in 5, not 1
EDIT: ternary would work `x ? x : y`
It's so irritating that something as simple as logical and/or isn't the same in different languages :/
In some languages 0 or 5 is 1, in others 0 or 5 is 5
Suppose I could make an inline function like
int or(int x, int y) {
if (x) return x;
return y;
}
EDIT: this won't work cause it'll evaluate both arguments
ok i think this will work even if nested, without statement expressions (so will compile on MSVC)
ORV(x, y) (tmp = (x) ? tmp : (y))
ANDV(x, y) (tmp = (x) ? (y) : tmp)
the AND version felt dicey but i realized that if you get to the (y) expression the tmp value is never evaluated so it's fine if it gets clobbered
@eniko If you do you own function, why don't use if/then/else instead of 'risking' with the ? thing ? .. At this point I won't change too much I suppose.
@gilesgoat because you can't do if/then/else inline in an expression