I am just starting out in C++ and we are learning about typical statements in code.  One that we typically use is int main() at the start of the actual program portion.  I understand we can also use void main().
My question is, why do we use int? I thought this was for defining variable types.  Are we actually declaring that the whole code is a variable?
 
    
    - 9
- 4
- 
                    3You cannot actually use `void main()`. It's not allowed by the language. Your compiler may allow it, but it isn't portable. – François Andrieux Jun 12 '18 at 19:05
- 
                    2`int main()` defines a function, not a variable. The leading type is the type of value the function returns. – François Andrieux Jun 12 '18 at 19:06
- 
                    In a way, yes, the whole program is a variable, an `int` which the program returns on exit. – quamrana Jun 12 '18 at 19:06
- 
                    https://stackoverflow.com/questions/449851/why-do-we-need-to-use-int-main-and-not-void-main-in-c More info here https://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c – Vivek Jun 12 '18 at 19:08
- 
                    If it is defined `int` then it expects to return a value. This is the "result". If it is `void` it does not expect to return a value. – Andrew Truckle Jun 12 '18 at 19:15
1 Answers
The main function (which is your entry point to the program) is defined by the C++ standard to always return int. void main is not valid according to the standard (even if your compiler accepts it).
The purpose of the int return value is to return a value to the operating system, telling it whether your program completed successfully or not. There are two well-defined macros available for returning such a value that you can depend on having a sane meaning - they are EXIT_SUCCESS and EXIT_FAILURE. You can return other values than those, but only those are guaranteed to have a sane semantic meaning - any other value is going to be platform/OS dependent (and while EXIT_SUCCESS is usually zero, you can't depend on that - on VMS (for example) that is not true, so you really should use the macros in portable code - and regardless, return EXIT_SUCCESS; communicates meaning much clearer than return 0;).
main is special compared to all other functions though, in that if no value is explicitly returned it implicitly returns EXIT_SUCCESS - I personally don't like relying on that though; I prefer explicitly returning what I intend to return.
 
    
    - 30,449
- 3
- 47
- 70
- 
                    1Worth adding: the `return` statement can be completely omitted from the `main` function and if that function completes, `EXIT_SUCCESS` is implied. – erip Jun 12 '18 at 19:50
-