Сведения о вопросе

Oleksandrop

20:18, 13th August, 2020

Теги

c++   return-value   main    

Почему int main() {} компилируется?

Просмотров: 401   Ответов: 4

(Я использую Visual C++ 2008) я всегда слышал, что main() требуется для возврата целого числа, но здесь я не вставлял return 0; и он компилировался с 0 ошибками и 0 предупреждениями! В окне отладки он говорит, что программа вышла с кодом 0. Если эта функция имеет имя, отличное от main(), компилятор жалуется, что 'blah' должно возвращать значение. Прилипание a return; также вызывает появление ошибки. Но если оставить его полностью, он прекрасно компилируется.

#include <iostream>
using namespace std;

int main()
{
    cout << "Hey look I'm supposed to return an int but I'm not gonna!\n";
}

Может быть, это ошибка в VC++?



  Сведения об ответе

9090

23:22, 11th August, 2020

3.6.1 основная функция ....

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

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

и

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

и он продолжает прибавлять ...

5 оператор return в main имеет эффект выхода из основной функции (уничтожение любых объектов с автоматической длительностью хранения) и вызова exit с возвращаемым значением в качестве аргумента. Если элемент управления достигает конца main , не сталкиваясь с оператором return, то результатом является выполнение return 0 ;

пытаясь найти онлайн-копию стандарта C++, чтобы я мог процитировать этот отрывок, я нашел сообщение в блоге, которое цитирует все правильные биты лучше, чем я мог бы.


  Сведения об ответе

dumai

16:35, 9th August, 2020

Это часть стандарта языка C++. Неявный возврат 0 создана для вас, если нет явного оператора return в функции main.


  Сведения об ответе

LAST

14:31, 27th August, 2020

Я почти уверен, что VC++ просто вставляет возвращаемое значение 0, если вы не включаете его в основные функции. То же самое может произойти и с функциями, но в этих случаях, по крайней мере, вы получите предупреждение.


  Сведения об ответе

lesha

23:34, 15th August, 2020

Раздел 6.6.3/2 гласит: "стекание с конца функции эквивалентно возвращению без значения; это приводит к неопределенному поведению в функции, возвращающей значение.".

Примером может служить приведенный ниже код, который в лучшем случае выдает предупреждение на VS 2010/g++

int f(){
   if(0){
      if(1)
         return true;
   }
}

int main(){
   f();
}

Таким образом, все дело в том, что 'main' является особенным, как указывали предыдущие ответы.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться