оператор возврата по сравнению с выходом () в основном ()

188
задан Bugfinger 8 June 2016 в 05:27
поделиться

3 ответа

На самом деле, там различие, но это тонко. Это имеет больше последствий для C++, но различия важны.

, Когда я буду звонить return в main(), деструкторы назовут для моих локально ограниченных по объему объектов. Если я буду звонить exit(), , то никакой деструктор не назовут для моих локально ограниченных по объему объектов! Перечитанный это. exit() не возвращается . Это означает, что, как только я называю его, нет "никаких backsies". Любые объекты, которые Вы создали в той функции, не будут уничтожены. Часто это не имеет никаких последствий, но иногда это делает, как заключительные файлы (конечно, Вы хотите все свои данные, сброшенные к диску?).

Примечание, что static объекты будут очищены, даже если Вы будете звонить exit(). Наконец обратите внимание на то, что, если Вы используете abort(), никакие объекты не будут уничтожены. Таким образом, никаким глобальным объектам, никаким статическим объектам и никаким локальным объектам не назовут их деструкторы.

Соблюдают осторожность при одобрении выхода по возврату.

http://groups.google.com/group/gnu.gcc.help/msg/8348c50030cfd15a

269
ответ дан FreeMemory 23 November 2019 в 05:43
поделиться

Другое различие: exit Стандартная Библиотечная функция, таким образом, необходимо включать заголовки и ссылку со стандартной библиотекой. Для иллюстрирования (в C++) это - действительная программа:

int main() { return 0; }

, но использовать exit Вам будет нужно то, чтобы включать:

#include <stdlib.h>
int main() { exit(EXIT_SUCCESS); }

Плюс это добавляет дополнительное предположение: тот вызов exit от main имеет те же побочные эффекты как возвращающий нуль. Как другие указали, это зависит от того, какой исполняемый файл Вы создаете (т.е. кто звонит main). Вы кодируете приложение, которое использует C-время-выполнения? Плагин майя? Служба Windows? Драйвер? Каждый случай потребует, чтобы исследование видело, эквивалентно ли exit return. По моему скромному мнению, с помощью exit, когда Вы действительно средний return просто делаете код более сбивающим с толку. OTOH, если Вы действительно имеете в виду exit, тогда любой ценой используют его.

24
ответ дан jwfearn 23 November 2019 в 05:43
поделиться

Я всегда использую return, потому что стандартный прототип для main() говорит, что действительно возвращается int.

Однако некоторые версии стандартов дают main специальный режим и предполагают, что он возвращается 0, если нет никакого явного return оператор. Учитывая следующий код:

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

G ++ только генерирует предупреждение для foo() и игнорирует недостающий возврат от main:

% g++ -Wall -c foo.cc
foo.cc: In function ‘int foo()’:
foo.cc:1: warning: control reaches end of non-void function
5
ответ дан Alnitak 23 November 2019 в 05:43
поделиться
Другие вопросы по тегам:

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