Скажем, у нас есть программа:Правильный способ "возвращения" из главного
int main(int argc, char** argv){
if(argc < 3){
printf("usage details\n");
return EXIT_FAILURE;
}
dostuff();
return EXIT_SUCCESS;
}
Я видел это так:
int main(int argc, char** argv){
if(argc < 3){
printf("usage details\n");
exit(EXIT_FAILURE);
}
dostuff();
exit(EXIT_SUCCESS);
}
Согласно ISO/IEC 9899: 1989 (C90):
Стандарт определяет 3 значения для возвращаемого значения, которые строго соответствуют (то есть, не полагаются на реализацию, определенную поведением iour): 0 и EXIT_SUCCESS для успешного завершения> и EXIT_FAILURE для неудачного завершения. Любые другие значения> нестандартные и реализация определена. main должен иметь явный оператор return at> end, чтобы избежать неопределенного поведения.
Кроме того, в соответствии с ISO/IEC 9899: 2011:
5.1.2.2.3 Завершение программы
Если возвращаемый тип основной функции является совместимый тип с int, возврат от> начального вызова к основной функции эквивалентен вызову функции exit с значением>, возвращаемым основной функцией в качестве аргумента; 11) достижение}, который завершает> основная функция возвращает значение 0 Если тип возврата равен n ot совместим с int,> статус завершения, возвращенный в среду хоста, не указан.
В нем указано, что возврат из основного эквивалентен выходу с тем же возвратным значением.
Это, как говорится, вопрос: Имеет ли значение, возвращают ли вы от основной и иметь его называют выход для вас, или выход из главного
Это эквивалентно. Как говорится в стандарте. т.е. взаимозаменяемы. – Mat
Зависит. Вы когда-нибудь планируете вызывать main() самостоятельно в своем собственном коде (возможно, рекурсивно)? Если это так, exit() является предельным выбором. –
@JohnDeters: Стандарт также запрещает вызов 'main()'. – duskwuff