C言語でクリーンアップコード?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
山田弘幸

C言語でクリーンアップコード?

#1

投稿記事 by 山田弘幸 » 18年前

はじめまして、山田と申します。
C++いじり初めて半年がたった初級者です。よろしくお願いします!
Pascalだと、

obj := THoge.create;
try
if IsValid then
exit;
if IsHoge then
exit;

Showmessage('hoge');
finally
obj.free;
end;

というような、クリーンアップコードというのがありますがCではないですよね。
どうも不便でしかたありません。そこんとこをうまく書くのが上級者なんですが、
みなさんは、関数内で最後に必ず実行しなければならないコードがある場合は
どのようにされてますか?

(関数の最後にFINALLY:などとラベルを置こうかとかも考えました。
が、goto文を使うと、その後にSTLのiteratorを使うとコンパイルできなかったりしました。
あとは別関数に切り出すとかですかね??)

YuO

Re:C言語でクリーンアップコード?

#2

投稿記事 by YuO » 18年前

CなんだかC++なんだか……。


C++の例外機構にはtry/catchはあるもののfinallyはありません。
しかし,デストラクタによる確定的な破棄が保障されています。

これらの特性から,C++では広義のスマートポインタを使ってリソースを管理します。
「RAII」あたりをキーに調べてみると良いでしょう。


で,C言語には例外機構がないですから,setjmp/longjmpを除いて,関数からの脱出方法はreturnのみになります。
よって,returnの箇所でgotoする方法で,十分なクリーンアップ処理が可能です。

山田弘幸

Re:C言語でクリーンアップコード?

#3

投稿記事 by 山田弘幸 » 18年前

返信ありがとうございました。

なるほど!
setjmp/longjmpなど、トリッキーな情報ありがとうございました!
なんとか頑張ってみます!

閉鎖

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