Well, actually you have to think about this from the perspective of the operating system, not the perspective of you writing code. Regardless of how you prototype main(), the Operating System, arbitrarily expects the application to push an integer onto the stack at time of exit. You get away with 'void' here, because a) it doesn't matter, the whole application heap ...