エラー処理の仕方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
AliceCoder
記事: 51
登録日時: 11年前

エラー処理の仕方

#1

投稿記事 by AliceCoder » 11年前

C言語の標準ライブラリでfopenなどを使用するとき、ファイルが開けたかどうか確認するためにNULLが入っていないかチェックして、NULLだったらreturnでmain関数を終えるという方法を学校では習っていました。
ですが、main関数以外での処理だとreturnだけでは処理がとまりません。
VC++限定でもいいので、何か便利な命令って用意されているでしょうか
それと、どのエラーで終わったのかなどを確認できるようなデバッグ方法なども教えてくださるとうれしいです。
自分は学校で有料版のVisualStudio2010のプロフィッショナル買わされましたが、無料版との違いがいまだによく分かりません。
それと自分で関数を作るときには戻り値が必要ない関数などにもエラーが起きたときのために、正常に終わったかどうかの戻り値をつけるべきなのかどうかなども気になります。
質問が多くなってきたので箇条書きでまとめます
①プログラムが終了するコマンドがあるかどうか(VisualStudio限定でもいい)
②どのエラーで終わったかどうか確認できる方法
③VisualStudioの有料版と無料版の違い
④関数の戻り値でエラーチェックをできるようにするかどうか
環境 windows7 64bit
VC++2010(無料版と有料版の両方を別々のPCにて使用している)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラー処理の仕方

#2

投稿記事 by softya(ソフト屋) » 11年前

①プログラムが終了するコマンドがあるかどうか(VisualStudio限定でもいい)

C言語に限定した場合。
終了する場合は、exit()関数を使うのがひとつの方法です。
あとはVisualStudioと連携するため、assert()マクロを使うのもひとつの方法です。
「assert (CRT)」
http://msdn.microsoft.com/ja-jp/library ... .100).aspx

②どのエラーで終わったかどうか確認できる方法

errno 値でエラーのコードが得られますので、strerror()関数などで文字列に変えて表示するのがおすすめです。

「_doserrno、errno、_sys_errlist、_sys_nerr (CRT)」
http://msdn.microsoft.com/ja-jp/library ... s.80).aspx
「errno 定数」
http://msdn.microsoft.com/ja-jp/library ... s.80).aspx

「strerror、_strerror、_wcserror、__wcserror (CRT)」
http://msdn.microsoft.com/ja-jp/library ... s.80).aspx

③VisualStudioの有料版と無料版の違い

プロフィッショナル=アカデミック版ならC++でGUIを作るフレームワークのMFCとか単体テスト機能などに差があります。
あとリソースエディタとか、64bitコンパイラが特にインストール無しに使えるとか。

「Visual Studio Express な あ・な・た に贈る Professional のおススメ - 長沢智治のライフサイクルブログ - Site Home - MSDN Blogs」
http://blogs.msdn.com/b/tomohn/archive/ ... ional.aspx


④関数の戻り値でエラーチェックをできるようにするかどうか

汎用的に使用して独自のエラーメッセージを出したり、リトライしたいなら戻り値で返す必要があります。
そのまま処理を打ち切って良いのなら、どうやっても構いません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

AliceCoder
記事: 51
登録日時: 11年前

Re: エラー処理の仕方

#3

投稿記事 by AliceCoder » 11年前

回答ありがとうございます。リンクもはっていただき、分かりやすかったです。
デバッグの技術をこれで学んでいきたいと思います

閉鎖

“C言語何でも質問掲示板” へ戻る