トップページ – C言語編 – 標準ライブラリのリファレンス(名前順)
トップページ – C言語編 – 標準ライブラリのリファレンス(ヘッダ別)
概要 |
実行時制約ハンドラを設定する。 |
|
ヘッダ |
||
形式 |
constraint_handler_t set_constraint_handler_s(constraint_handler_t handler); |
|
引数 |
handler |
新しく設定する実行時制約ハンドラ。 ヌルポインタを指定した場合は、デフォルトの実行時制約ハンドラが設定される。 |
戻り値 |
以前に設定されていた実行時制約ハンドラ。 最後に set_constraint_handler_s関数を呼び出したときの実引数がヌルポインタだった場合や、初回の呼び出しであった場合は、処理系のデフォルトの実行時制約ハンドラが返される。 |
|
詳細 |
実行時制約に違反したときに呼び出される実行時制約ハンドラを設定する。 実行時制約ハンドラは同時に1つだけであり、最後に設定したものだけが有効である。また、初期状態では、デフォルトの実行時制約ハンドラが設定されている。デフォルトの実行時制約ハンドラの実装は処理系定義であり、プログラムを終了させたり、中断させたりする可能性がある。 標準には、何もしないという挙動を実装した ignore_handler_s関数と、プログラムを異常終了させるという挙動を実装した abort_handler_s関数が定義されており、これらを設定することもできる。 実行時制約ハンドラが呼び出されるとき、その実引数は以下の順番で渡される。 第1引数: 違反した実行時制約について説明する文字列へのポインタ。 第2引数: ヌルポインタ、または実装定義のオブジェクトへのポインタ。 第3引数: 実行時制約違反を検出した関数の戻り値が errno_t型であれば、その戻り値。そうでなければ、errno_t型の正の値。 この関数は、__STDC_LIB_EXT1__ が定義されている処理系でのみ使用できる。また、この関数を使用するのなら、<stdlib.h> をインクルードする前に、__STDC_WANT_LIB_EXT1__ という名前のマクロを、置換結果 1 として定義することが作法となっているが、これを行わずとも関数を使用できる処理系もあり得る。 |
|
注意 |
デフォルトの実行時制約ハンドラの挙動は処理系定義である。これが問題であれば、独自の実行時制約ハンドラを定義して設定しておくべきだろう。 Visual Studio 2017 では使用できない。代わりの仕組みとして、_set_invalid_parameter_handler関数による方法があるが、Microsoft 独自の仕様のものになる。 |
|
使用例 |
実行結果(stderr):
|
|
関連 |
実引数に指定する実行時制約ハンドラとして、何もしないという挙動を実装した ignore_handler_s関数と、プログラムを異常終了させるという挙動を実装した abort_handler_s関数が定義されている。 |
|
解説章 |
本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place
管理者に紹介料が支払われています。
return 0;
を削除(C言語編全体でのコードの統一)新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |