But how would you then fix the sign-compare violation, or would you just let this one go?
If you want it to be more compact:
unsigned int i;
...
for (i = sizeof(foo) / sizeof(foo[0]) - 1; ~i; --i)
Tested? No. Readable? Don't ask me... :-)
Cheers, Peter