But is it possible to write
if (x > 0) x--;
as a ternary expression with an empty else clause?
No, the conditional operator requires three operands. If you wanted, you could do this:
x = (x > 0) ? x - 1 : x;
...but (subjectively) I think clarity suffers.