t_stddef.h

カーネル・アプリケーション 共通インクルードファイル [詳細]

#include <tool_defs.h>
#include <limits.h>

t_stddef.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

マクロ定義

#define throw()
 例外を送出しないことを明示する例外指定
#define assert(exp)
 プログラム診断マクロ


説明

カーネル・アプリケーション 共通インクルードファイル

このインクルードファイルは,kernel.h と sil.h の先頭でインクルードされる.他のファイルから直接インクルードされることはない.

この中でインクルードしているファイルを除いて,他のインクルードファイルに依存していない.

t_stddef.h で定義されています。


マクロ定義

#define assert ( exp   ) 

値:

((void)(!(exp) ? (_syslog_3(LOG_EMERG, LOG_TYPE_ASSERT,         \
                                (VP_INT)(__FILE__), (VP_INT)(__LINE__), \
                                (VP_INT)(#exp)),                        \
                                kernel_abort(), 0) : 0))
プログラム診断マクロ

標準Cライブラリの assert マクロと同等の機能を提供する。ただし、診断メッセージの出力先は標準エラー出力ではなく syslog である。

ここで定義される assert マクロは t_stddef.h をインクルードする時点での NDEBUG マクロの定義状態によって振る舞いが変わる。 すなわち、 t_stddef.h をインクルードする時点で NDEBUG マクロが定義されていなければ assert マクロは式 expr を評価し、その結果が偽であれば、 syslog に診断メッセージを出力した上でカーネルの実行を終了させる。 NDEBUG マクロが定義されていれば assert マクロは何も行わない (expr も評価されない)。

参照元 hw_timer_initialize()make_non_wait()make_wait_tmout()queue_delete_next()queue_empty()tmevtb_enqueue().

 
#define throw (  ) 

例外を送出しないことを明示する例外指定

C言語およびEmbedded C++では例外指定は必要ないため、このマクロは無効になる。

C++では、関数原型に例外指定 throw() を付けることで、その関数から決して例外が送出されないことを明示することができる。 結果として、例外送出時にスタックを巻き戻すための仕組みが不要となり、速度・サイズともに効率のよいコード生成が期待できる。


Copyright © 2006 by TAKAGI Nobuhisa.
Copyright © 2006 by Kijineko Inc..
このページは Mon Dec 18 17:19:43 2006 に Doxygen によって生成されました。
データ入力からプログラム開発まで!様々なスキルを持ったメンバーが登録しています【@SOHO】