返信する: 汎用質問板



オプション

参照

Re: D言語でC言語のexitにあたる関数
投稿者: SHOO 投稿日時: 2010/1/10 12:54
>assertはC言語でもあるので、使ってもD言語って感じがあんまりしないので。

勘違いしてしまったとしたら申し訳ないのでassert文についてすこし…((もしわかりきっていることだとしたら申し訳ありませんが))

assert文を利用しているからCっぽいという意味ではありません。
exit関数やabort関数は、throwなどがあるため、普通D言語では利用しないとは思いますが…

assertはD言語の機能の中でも、契約プログラミングを行う上で比較的重要な役割を持っています。
D言語のassertは、C言語のassertとは違い、言語組み込みの機能となっています。(C言語のassertはマクロです)
使い方はC言語のassertと同様ですが、今回のように、プログラムを途中でabortするために利用して良い機能ではありません。
assertは、絶対に真にならなければならない条件を記述する機能となっています。assert(0)の場合は、その場所には絶対に来ないことを表明するためのものです。
また、assert文はリリースコンパイル時には実行されません。つまり、実行されないと困ることを書くことはできません。

#code(d){{{
while (1) {
// iは必ずary.lengthより小さい。
// そうでない配列はここに来ることは有り得ない。
// (つまり配列内に必ず100という数値が含まれる)
assert(i < ary.length);
if (ary[i++] == 100) return 0;
}
// 必ずwhile文の中でreturnされる。
// これ以降が実行されることは有り得ない。
assert(0);
}}}

などのように使います。
簡単に言うと、「絶対にこうなっていなければおかしい」という表明文を書くことで、もし万が一プログラマの勘違いやミスで「そうなっていなかった場合」に、プログラムを強制終了することでバグを気づきやすくするためのツールです。

参考:
http://www.kmonos.net/alang/d/2.0/dbc.html
メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu