例外処理とは
ここでは例外処理、すなわち意図しない動作をしたときの処理について考えましょう。
例えば、ユーザーが入力した二つの整数を加算するプログラムを考えましょう。
標準入力で値を受け取って加算するだけです。
簡単なプログラムですね。
適当な数字を入力すれば求める結果が表示されるでしょう。
しかし、ユーザーが小数を入力した場合はどうなるでしょう。
文字だったらどうでしょうか。
自分で作ったプログラム以外でもあります。
webサイトでパスワードを全角で入力して注意書きが出たことはありませんか?
このように、想定外の動作がなされると不具合が起きてしまう場合があります。
そこで、想定外の動作に対する処理を別に用意するのが例外処理です。
特にユーザーの入力があったり、ファイルを読み込んだりと、外部環境に動作が依存するものには必要な処理になります。
ただ計算するだけのプログラムでは必要ないことは理解できますね。
C言語における例外処理
C言語には、この例外処理を実装するための機能を持っていません。
その為、自分で処理をする必要があります。
これには代表的な方法があります。
関数の返り値にエラー時の値を設定するものです。
これは多くのライブラリでも使用されます。
例えば値を返す必要のない関数を定義するなら普通はvoid型ですね。
しかしこれをint型などで定義します。
そして何を返すかというと、例えば、処理が正しく行われたら0、処理が失敗したら1を返すことにします。
これを呼び出す際、if文の中で呼び出すことで簡単にエラー処理ができます。
このような形になります。
exception_sample.cpp
int func(void) { 【処理】 if(【処理失敗】) return -1; return 0; } int main(void) { 【処理】 if(func()) //func()が-1なら 【例外処理】 【処理】 return 0; }
関数func()内で、処理が失敗した場合-1を返します。
そしてmain()関数内でfunc()を呼び出す際、if文の中で呼び出し、その返り値によって例外処理をするかが決まります。
よく見るパターンなので知っておくとよいでしょう。
C++における例外処理
C++には例外処理を簡単に行う構文が用意されています。
詳しくはtry-catch構文を参照。
例外処理を使って、より良いコードを書きましょう。