URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9285
[ Назад ]

Исходное сообщение
"различие между return и exit в main()"

Отправлено shadowmaan , 16-Ноя-11 01:41 
Здравствуйте,

Есть ли какое-нибудь различие между вызовом exit() и использованием return в функции main() в C программе?


int main(void)
{
  return 0;
}



int main(void)
{
  exit(0);
}


Содержание

Сообщения в этом обсуждении
"различие между return и exit в main()"
Отправлено pavlinux , 16-Ноя-11 08:54 
> Есть ли какое-нибудь различие между

Ну примерно около миллиона тактов процессора,
#include <stdlib.h> ... +19 символов в код,
и скорее всего на десяток байт распухнет бинарник.

popq    %rbp
ret

или

movl    $0, %edi
call    exit


"различие между return и exit в main()"
Отправлено Аноним , 16-Ноя-11 09:03 
>[оверквотинг удален]
> {
>   return 0;
> }
>

>
 
> int main(void)
> {
>   exit(0);
> }
>

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


"различие между return и exit в main()"
Отправлено shadowmaan , 16-Ноя-11 23:07 
Спасибо, момент прояснил.

Вот некоторые выводы, которые я сделал.


#include <stdlib.h>
#include <unistd.h>

int main(void)
{
  // размер программы 8648
  return 5; // start up код вызывает exit(); получается exit(main())
  exit(5); // ISO C
  // exit() закрывает I/O вызывая fclose()

  // следующие вызовы немедленно возвращают управления ядру
  // размер программы немного больше 8696
  _Exit(5); // ISO C (stdlib)
  _exit(5); // POSIX (unistd)

  // если нет вызова exit() или return, то
  // согласно С99 возвращается 0,
  // до С99 возвращаемое значение не определено
}