In Turbo C , void main () will be accepted, whereas in dev-cpp main () should return a value. 3.return 0 simply exits the program with exit status 0 , in other words the return value determines the exit status of the main thread. What the supposed duplicate doesn't answer: having a main () function (instead of just writing all the code into the "if name" block) is useful because it avoids accidentally creating global variables that could affect other functions. The interesting part is "with no parameters". int main () and int main (void) are currently equivalent, since they are both function declarators and have no parameters. The following applies (6.7.6.3 ): 10 The special case of an unnamed parameter of type void as the only item in the list specifies that the function has no parameters. /--/ If you are trying to close a question where someone should be using this idiom and isn't, consider closing as a duplicate of Why is Python running my module when I import it, and how do I stop it? instead. For questions where someone simply hasn't called any functions, or incorrectly expects a function named main to be used as an entry point automatically, use Why doesn't the main () function run when I start a Python script? Where does the script start running?.