uint8_t o[10];
...then it's legal to construct pointers to o[0] through o[10] --- not o[9]; you can create a pointer to the byte immediately after the object --- and nowhere else. Like, it's not even legal to calculate one, let alone dereference it. add(a, b, c) { return a+b+c; }
But the ad-hoc parameter types only really worked if all your types were the same size, so it doesn't really get on with 64-bit machines. (I have just fixed some ancient code which was doing this: msg(s, a1, a2, a3, a4)
char* s;
{
printf("info: ");
printf(s, a1, a2, a3, a4);
}
...later...
{
msg("an int is %d", anInt);
msg("a string is %s", aString);
}
Yeah, no. proc add = (int a, int b, int c):
(a + b + c)
I believe that C99 added the ability to losslessly cast from a pointer to a uintptr_t and back again, but, IIRC, the compiler didn't have to support this in C89.