Re: D言語でC言語のexitにあたる関数

投稿ツリー


このトピックの投稿一覧へ

なし Re: D言語でC言語のexitにあたる関数

msg# 1.1.1.1
depth:
3
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/1/10 12:54
SHOO  管理人   投稿数: 658
>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
投票数:85 平均点:5.18
返信する

この投稿に返信する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





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

Menu