#cpp
Вот возник вопрос по коду:
int main()
{
...
system("Pause");
return 0; // имеет ли смысл эта строчка после паузы?
}
Нужно ли возвращать значение в главной функции, если делается системная пауза? Или
данный пример считается кодом плохого стиля?
Ответы
Ответ 1
Да, возвращаемое значение имеет смысл. Это пришло из философии Юникса, где программа своим кодом возврата сообщает другим программам, успешно ли она отработала. 0 считается индикатором успешного выполнения, остальные значения -- нет. Если ваша программа работает "сама по себе", не в связке с другими, в принципе можно возвращать что угодно, но хорошим тоном всё равно считается возвращение нуля или не нуля в зависимости от того, успешно или нет отработала программа. Если же ваша программа должна работать вместе с другими, как часть скрипта -- возврат разумного кода завершения (так называется значение, возвращаемое функцией main) обязателен! По стандарту C++ в функции main можно опустить return (что равносильно return 0), но я бы не рекомендовал этого делать из соображений хорошего стиля.Ответ 2
Функция main() возвращает значение int. Поэтому return нужен в любом случае.Ответ 3
Возвращаемое значение всегда нужно. Во-первых, паузу так никто не делает. Под Линуксом такой код неработоспособен. Я предлагаю просто сделать ожидание ввода. Можно через getch() или while(!kbhit()) или еще как-то. Обратить внимание, что не все способы названные переносимы. Во-вторых, можно запросто убрать вызов system в процессе разработки программы и? В третьих, программа, по моему понятию, после system продолжает выполнение со следующей инструкции. Можете проверить это на практике.Ответ 4
В дополнение к уже сказанному о коде возврата могу добавить, что корректно (осмысленно для окружения) завершить программу можно 4-мя способами. Это уже рассмотренный оператор return, функции exit() и raise(), а также системный вызов _exit(). Действия при return и вызове exit() одинаковые. Подробности про exit(), _exit() и raise() см. соответствующие man. Проиллюстрировать это можно такой программкой: #include#include #include #include void fin() { puts("atexit func"); } int main (int ac, char *av[]) { atexit(fin); if (!av[1]) _exit(puts("_exit") == EOF); else if (*av[1] == 'x') exit (puts("exit") == EOF); else if (*av[1] == 'r') raise(SIGTERM); return (puts("return") == EOF); } А вот ее результат avp@avp-xub11:~/hashcode$ for i in x 1 '' r; do > echo ./a.out $i; ./a.out $i; echo rc = $?; done ./a.out x exit atexit func rc = 0 ./a.out 1 return atexit func rc = 0 ./a.out _exit rc = 0 ./a.out r Terminated rc = 143 avp@avp-xub11:~/hashcode$ Выводимый rc = ... это тот самый код возврата, которым программа "говорит" о том, как она завершилась. Традиционно 0 - это успешно. Кстати, в windows коды возврата тоже используется. Например (переносимо для Makefile (!)) myprog && echo Success в командной строке выведет Success только если myprog успешно завершилась. Ответ 5
Нужно ли возвращать значение в главной функции, если делается системная пауза? Пауза и возвращаемое значение вообще никак не связаны. После нажатия любой клавиши пауза снимется и программа продолжится, как ни в чём ни бывало. Так что это условие лишнее. По поводу return'а не буду повторять, уже ответили.Ответ 6
return 0; если небудет этой строчки то операционной системе всё равно "что-то" вернётся ("мусор"). некоторые компиляторы даже не дадут скомпилировать. p.s. уж лучше выбрать "что вернуть" чем вернуть "мусор", если не хочешь возвращать объяви main как void, но компиляторы опять таки могут ругаться
Комментариев нет:
Отправить комментарий