Йей, още нещо забавно (и доста очаквано апропо). Ако човек погледне моята "truth табличка", ще забележи, че abs(-4) връща -4 ако не се кастне до unsigned int, понеже 4 няма представяне в signed вид. Абсолютно същото важи и за abs() функцията която идва с libc:
GeSHi (C):
#include <stdlib.h>
#include <stdio.h>
void main()
{
unsigned int a=0x80000000;
int b=a;
printf("(unsigned int)abs(a)=%u\n",b
);
}
....
GeSHi (Bash):
./abs
abs(a)=-2147483648
(unsigned int)abs(a)=2147483648
Това поведение е очаквано де, не мисля, че има нещо по-правилно в случая.
Така че умната при ползване на abs() ехех...в един определен случай може да има изненада