VOS C return v.s. exit2008年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秒

気づいたときに巡回してるので今更ですが。

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で値が戻らないものですけど、コマンドマクロの連携から上記の通りにしてます。

_ uyota ― 2008年04月13日 03時53分42秒

VOS での C は独自拡張や PL/1 でのシステムコールとの兼ね合いで、色々と不可思議な動作を経験することが多いですね。

普段だと既存のシステムに新しいプログラムを追加したりする機会も少ないですし、また色々なライブラリやコーディング規約などにより、このような経験をする事は少ないです。使い捨てのテストプログラムや簡単なシステムコールやライブラリの動作を確認する物を書いた時などに、よく上の様な経験をします。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2008/02/16/2633340/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。