Почему делает международное основное () {} компиляция?

Еще один рекурсивный факториал с Java 8

public static int factorial(int i) {
    final UnaryOperator<Integer> func = x -> x == 0 ? 1 : x * factorial(x - 1);
    return func.apply(i);
}
36
задан Helen 17 July 2009 в 20:19
поделиться

4 ответа

3.6.1 Основных функций

....

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

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

и

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

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

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

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

72
ответ дан phuclv 27 November 2019 в 05:25
поделиться

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

18
ответ дан On Freund 27 November 2019 в 05:25
поделиться

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

3
ответ дан bradtgmurray 27 November 2019 в 05:25
поделиться

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

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

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

int main(){
   f();
}

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

2
ответ дан 27 November 2019 в 05:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: