What compiler are you using?
Does it work correctly if you redefine printit to void instead of default-int and place it above main (or prototype it)?

Tried it in Visual Studio 2005 and it wouldn't compile because of the above; I set the return of printit to void and moved it above main and it worked fine.

So I'd guess this is either a compiler bug or a consequence of some of the default behaviour you're relying on here (mainly that when the compiler finds printit in use it assumes its prototype is "int printit()" ).