VOS C return v.s. exit ― 2008年02月16日 18時16分59秒
!display_line (command_status)
で最後に実行したプログラムの返り値を調べることが出来る。
UNIX 環境では、この返り値は main 関数の return の値でも exit 関数に渡した値でも、どちらでも $?
で調べられる。どうも、VOS では exit 関数でしか、受渡しが出来ないようだ。
return 1
でも return 2
でも、(command_status)
が 0 のままなので、おかしいと思ったら return
が使われているところだった。exit
に変えたら、期待通りの値に変わった。
コメント
_ Takky ― 2008年04月04日 00時35分31秒
_ uyota ― 2008年04月13日 03時53分42秒
普段だと既存のシステムに新しいプログラムを追加したりする機会も少ないですし、また色々なライブラリやコーディング規約などにより、このような経験をする事は少ないです。使い捨てのテストプログラムや簡単なシステムコールやライブラリの動作を確認する物を書いた時などに、よく上の様な経験をします。
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2008/02/16/2633340/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
VOS C、ANSI Cともにreturn に値を書けばcommand_statusへ値が戻りますけど何が問題だろ?
http://uyota.asablo.jp/blog/2008/02/13/2623680
こちらの問題と絡んでる気もしますけど。
int main()
{
return 2;
}
これでcommand_statusへ値2が戻ってますけどね。
うちの会社ではメインがPL/Iですが、プログラムの終了をs$stop_program()へ統一してます。こちらは指定したエラーコードがそのままcommand_statusへ戻りますので。PL/I自体終了はstopで値が戻らないものですけど、コマンドマクロの連携から上記の通りにしてます。