The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"различие между return и exit в main()"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"различие между return и exit в main()"  +/
Сообщение от shadowmaan (ok) on 16-Ноя-11, 01:41 
Здравствуйте,

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


int main(void)
{
  return 0;
}



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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

popq    %rbp
ret

или

movl    $0, %edi
call    exit

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "различие между return и exit в main()"  +/
Сообщение от Аноним (??) on 16-Ноя-11, 09:03 
>[оверквотинг удален]
> {
>   return 0;
> }
>
>
 
> int main(void)
> {
>   exit(0);
> }
>

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "различие между return и exit в main()"  +/
Сообщение от shadowmaan (ok) on 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 возвращаемое значение не определено
}

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру