abort_handler_s | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


abort_handler_s関数

概要

プログラムを異常終了させる実装の実行時制約ハンドラ

ヘッダ

stdlib.h

形式 void abort_handler_s( const char * restrict msg, void * restrict ptr, errno_t error );
引数 msg 違反した実行時制約について説明する文字列へのポインタ。
ptr ヌルポインタ、または実装定義のオブジェクトへのポインタ。
error 実行時制約違反を検出した関数の戻り値が errno_t型であれば、その戻り値。そうでなければ、errno_t型の正の値。
戻り値 なし
詳細

実行時制約違反に対して、プログラムを異常終了させるという実装を行った実行時制約ハンドラ。

set_constraint_handler_s関数に渡すことで、実行時制約ハンドラとして使用される。

実引数は、実行時制約違反を検出した関数から渡される。

この関数は、標準エラーへ、引数msg の内容を含んだ処理系定義の文字列を出力したあと、abort関数によって異常終了するように実装されている。

この関数は、__STDC_LIB_EXT1__ 事前定義マクロが定義されている処理系でのみ使用できる。また、この関数を使用するのなら、<stdlib.h> をインクルードする前に、__STDC_WANT_LIB_EXT1__ という名前のマクロを、置換結果 1 として定義することが作法となっているが、これを行わずとも関数を使用できる処理系もあり得る。

注意 Visual Studio 2017 では使用できない。
使用例
// Visual Studio 2017 には、set_constraint_handler_s関数がなく、
// そもそも、実行時制約に関する仕様も異なるため、
// このサンプルプログラムはコンパイルできない。

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    set_constraint_handler_s(abort_handler_s);

    char s[5];
    if (strcpy_s(s, sizeof(s), "xxxxxxxx") == 0) {
        puts(s);
    }
    else {
        fputs("文字列のコピーに失敗", stderr);
    }
}

実行結果(stderr):

(※実行を確認できる環境がないため、実際のメッセージは不明です)
**********
(異常終了)
関連

何もしないという挙動を実装した ignore_handler_s関数が定義されている。

解説章


参考リンク 🔗

本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。


更新履歴 🔗

 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る