2013-11-11 4 views
2

Скажем, у нас есть программа:Правильный способ "возвращения" из главного

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,> статус завершения, возвращенный в среду хоста, не указан.

В нем указано, что возврат из основного эквивалентен выходу с тем же возвратным значением.

Это, как говорится, вопрос: Имеет ли значение, возвращают ли вы от основной и иметь его называют выход для вас, или выход из главного

+0

Это эквивалентно. Как говорится в стандарте. т.е. взаимозаменяемы. – Mat

+2

Зависит. Вы когда-нибудь планируете вызывать main() самостоятельно в своем собственном коде (возможно, рекурсивно)? Если это так, exit() является предельным выбором. –

+4

@JohnDeters: Стандарт также запрещает вызов 'main()'. – duskwuff

ответ

2

В качестве способов прекращения программы, return и exit тесно Связанный. В самом деле, утверждение

return EXIT_SUCCESS; 

в main эквивалентно

exit (EXIT_SUCCESS); 

Разница между return и exit является то, что прекращение exit причины программы независимо от того, какая функция вызывает его. Оператор return вызывает завершение программы только тогда, когда она появляется в функции main.

+2

Другое отличие состоит в том, что 'exit' может использоваться в конструкциях типа' a == 1? do_stuff(): exit (EXIT_FAILURE); 'и' return' не может –

Смежные вопросы