tags:

views:

158

answers:

4
+5  Q: 

main cant be void

Possible Duplicate:
does c++ standard prohibit the void main() prototype?

Why is bloodshed c++ not letting me do void main()? its not much of a problem, but Im still curious.

+14  A: 

Because return type of main()(as mandated by the Standard) must be int

C++03 [Section 3.6.1 Main function]

An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined.

Prasoon Saurav
+4  A: 

Because the standard says that it returns int.

gregg
+1  A: 

Some operating systems expect an integral return value from processes. Declare main to return an int. If you don't care about the value, simply return 0.

From the comp.lang.c FAQ:

Andy Thomas-Cramer
You don't even need to return anything explicitly.
GMan
@GMan - good point.
Andy Thomas-Cramer
+8  A: 

Answer from Stroustrup himself:

Can I write "void main()"? The definition

void main() { /* ... */ }

is not and never has been C++, nor has it even been C. See the ISO C++ standard 3.6.1[2] or the ISO C standard 5.1.2.2.1. A conforming implementation accepts

int main() { /* ... */ }

and

int main(int argc, char* argv[]) { /* ... */ }

A conforming implementation may provide more versions of main(), but they must all have return type int. The int returned by main() is a way for a program to return a value to "the system" that invokes it. On systems that doesn't provide such a facility the return value is ignored, but that doesn't make "void main()" legal C++ or legal C. Even if your compiler accepts "void main()" avoid it, or risk being considered ignorant by C and C++ programmers.

In C++, main() need not contain an explicit return statement. In that case, the value returned is 0, meaning successful execution. For example:

#include<iostream>

int main()
{
    std::cout << "This program returns the integer value 0\n";
}

Note also that neither ISO C++ nor C99 allows you to leave the type out of a declaration. That is, in contrast to C89 and ARM C++ ,"int" is not assumed where a type is missing in a declaration. Consequently:

#include<iostream>

main() { /* ... */ }

is an error because the return type of main() is missing.

Source: http://www2.research.att.com/~bs/bs_faq2.html#void-main

Sheldon L. Cooper