Вопрос

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

#include <iostream>
using namespace std;

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

Может ли это быть ошибка в VС++?

Это было полезно?

Решение

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

....

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

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

и

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

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

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

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

Другие советы

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

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

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

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

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

int main(){
   f();
}

Итак, весь смысл в том, что «main» является особенным, как указывалось в предыдущих ответах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top