>In other words, any difference between "int main ()" and "int main (void)"?
It depends on where you use it. For a function declaration, there's a subtle and disturbing difference:
For a function definition, there's still a minor difference:
void foo(); // Takes an unknown number and type of parameters
void foo ( void ); // Takes no parameters
A full prototype, of course, guarantees that you'll be informed of improper use of the function. You should always use void when you intend for a function to have no arguments, and you should refrain from using empty parameter lists because it's a feature of the language that's being phased out with new revisions of the standard. It's also dangerous.
// Does not ensure a complete prototype
// Ensures a complete prototype
void foo ( void )
>Is there any difference between an integer main function that returns 0 and a void main function?
Yes, main returning an integer is correct and main returning anything else is not. The C standard makes it very clear that the following declarations of main (and anything directly equivalent) are allowed:
Anything else is implementation-specific. It could either work if your implementation allows it, or invoke undefined behavior. That kind of uncertainty makes using void main exceptionally stupid.
int main ( void );
int main ( int argc, char *argv );