2010-09-30 4 views
5

Можно создать дубликат:
does c++ standard prohibit the void main() prototype?главным образом, не может быть недействительным

Почему C++ не позволяя мне делать void main()? Это не проблема, но мне все еще интересно.

+0

что проблема с Int пустоте() {вернуть 0;}; ? – Max

+1

То же, что и [ ли стандарт C++ запрещает прототип void main()? ] (http://stackoverflow.com/questions/1915659/does-c-standard-prohibit-the-void-main-prototype). –

+2

лучший вопрос - почему вы используете кровопролитие C++;) –

ответ

11

Поскольку обратный тип main() (как это предусмотрено в стандарте) должны быть int

C++ 03 [Section 3.6.1 Главная функция]

Реализация не должна предопределять основную функцию. Эта функция не должна быть перегружена. Он должен иметь тип возвращаемого типа int, но в противном случае его тип определяется реализацией.

4

Потому что стандарт говорит, что возвращает int.

1

Некоторые операционные системы ожидают интегрального значения возврата от процессов. Объявите main, чтобы вернуть int. Если вы не заботитесь о стоимости, просто возвращают 0.

Из comp.lang.c FAQ:

+3

Вам даже не нужно ничего явно возвращать. – GManNickG

+0

@GMan - хорошая точка. –

9

ответ от Страуструпом сам:

Могу ли я написать "пустота основной()"? Определение

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

не и никогда не было C++, равно как и не было даже С. См ISO C++ стандартный 3.6.1 [2] или стандартный 5.1.2.2.1 ISO C. Соответствующая реализация принимает

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

и

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

Соответствующая реализация может обеспечить несколько версий основной(), но все они должны иметь тип возвращаемого значения Int. Функция int, возвращаемая main(), является способом для программы возвращать значение в «систему», которая вызывает его. В системах, которые не предоставляют такое средство, возвращаемое значение игнорируется, но это не делает «void main()» законным C++ или законным C. Даже если ваш компилятор принимает «void main()», избегает его или рискует будучи не осведомленным программистами C и C++.

В C++ main() не должен содержать явный оператор return. В этом случае возвращаемое значение равно 0, что означает успешное выполнение. Например:

#include<iostream> 

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

Обратите также внимание, что ни ISO C++, ни C99 не позволяют оставить этот тип из декларации. То есть, в отличие от C89 и ARM C++, «int» не предполагается, когда в декларации отсутствует тип.Следовательно:

#include<iostream> 

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

- это ошибка, так как отсутствует тип возврата main().

Источник: http://www2.research.att.com/~bs/bs_faq2.html#void-main