How exactly do register variables work in C? When should they be used? K&R touches upon them briefly but moves right along. Is there any source in which I can read about them in depth?
It doesn't matter whether a given compiler supports some syntax or another. Zero-sized arrays are illegal. void-typed variables are illegal. In the latter case, a compiler that compiles such code is non-compliant, since it's strictly forbidden by ISO C99 to accept that.