Reasons for supporting many platforms For example, the C standards say that it is up to the compiler whether "char" is "signed char" or "unsigned char" Consider this program: #include int main() { char c = -1; printf("%d\n", (int)c); return 0; } char c = -1; printf("%d\n", (int)c); return 0; } On ARM based platforms "char" is usually unsigned and a conversion of (unsigned char)-1 to (int)-1 yields 255, not -1 as on other platforms