title: Does abs(unsigned long) make any sense?
body: <p>I've come across this code, which incidentally my profiler reports as a bottleneck:</p>
  
  <pre><code>#include &lt;stdlib.h&gt;
  
  unsigned long a, b;
  // Calculate values for a and b
  unsigned long c;
  
  c = abs(a - b);
  </code></pre>
  
  <p>Does that line do anything more interesting that <code>c = a - b;</code>? Do either of the options invoke undefined or implementation-defined behaviour, and are there other potential gotchas? Note that the C <code>&lt;stdlib.h&gt;</code> is included, not <code>&lt;cstdlib&gt;</code>.</p>