How can something like

Code:
define abs(x) (((x) >= 0) ? (x) : -(x))
Cause a possilbe overflow.

But something like
Code:
define abs(x) (((x) < 0) ? -(x) : (x))
is passable