В чем разница между "остановкой" и "выходом" в Фортране?

В чем разница между stop и exit в Fortran?

Оба могут немедленно завершить программу с некоторой информацией об ошибке.

Ответ 1

exit в Fortran - это оператор, который завершает циклы или завершает выполнение других конструкций. Однако возникает вопрос о нестандартном расширении как функции или подпрограммы, предлагаемой многими компиляторами, которая тесно связана с оператором stop.

Например, gfortran предлагает такую ​​вещь.

Поскольку это использование exit является нестандартным, вы должны ссылаться на конкретную документацию по внедрению относительно того, какую форму он принимает и какие последствия он имеет.

Оператор stop, с другой стороны, является стандартным выражением Fortran. Этот оператор инициирует нормальное завершение выполнения программы Fortran (и его можно сравнить с оператором error stop, который инициирует завершение ошибки).

Помимо знания того, что завершение (обычно) выполнения программы следует за оператором stop и что существует код остановки, фактический способ, который происходит, снова остается открытым для реализации. Есть несколько рекомендаций (но это только рекомендации) относительно того, что происходит. Например, в Fortran 2008 предлагается

  • код остановки (который может быть целым числом или строкой) печатается в блок "ошибка";
  • если код останова является целым числом, он будет использоваться в качестве статуса выхода процесса;
  • если в качестве статуса выхода не возвращается нулевой код (или его символ).

Вышеизложенное довольно неопределенно, так как во многих настройках эти понятия не применяются.

Обычно на практике exit будет похож на библиотечную функцию C этого имени, и его эффект будет выглядеть как stop без кода остановки (но все же передача данного статуса обратно в ОС).

В заключение, Fortran не описывает разницу между stop и exit. Использование exit (для терминации) не переносимо, и даже эффект stop не полностью определен.

Ответ 2

stop - оператор fortran, но exit - это функция, которая только что завершает работу программы.

Оператор stop выводит свой аргумент [который также может быть строкой] на stderr

stop 123

и он вернет нулевой статус родительскому процессу.

В то время как exit является функцией и должна вызываться как любая другая. Он также будет молчать (т.е. Нет сообщения):

call exit(123)

и аргумент exit будет возвращен родительскому процессу как статус