/** * @file nstdc_assert.h * @brief アサーションを扱うヘッダーファイル * @author Nomura Kei * @copyright 2003 - 2017 Nomura Kei * License: New BSD License (3-cclause BSD license) */ #ifndef NSTDC_ASSERT_H #define NSTDC_ASSERT_H #include <stddef.h> #include <stdbool.h> #include <config.h> #include <nstdc.h> #include <nstdc_compiler.h> #ifdef NSTDC_DEBUG #define nstdc_assert(val) nstdc_assert_( val , #val, __FILE__, __LINE__, __func__) #define nstdc_assert_num(v1, v2) nstdc_assert_num_(v1, v2, #v2 , __FILE__, __LINE__, __func__) #define nstdc_assert_str(v1, v2) nstdc_assert_str_(v1, v2, #v2 , __FILE__, __LINE__, __func__) #define nstdc_assert_mem(v1, v2, size) nstdc_assert_mem_(v1, v2, size, #v2 , __FILE__, __LINE__, __func__) #else #define nstdc_assert(val) UNUSED_VARIABLE(val) #define nstdc_assert_num(v1, v2) UNUSED_VARIABLE(v1); UNUSED_VARIABLE(v2) #define nstdc_assert_str(v1, v2) UNUSED_VARIABLE(v1); UNUSED_VARIABLE(v2) #define nstdc_assert_mem(v1, v2, size) UNUSED_VARIABLE(v1); UNUSED_VARIABLE(v2); UNUED_VARIABLE(size) #endif /* NSTDC_DEBUG */ #ifdef __cplusplus extern "C" { #endif typedef struct { /** 真偽判定時のアサーションエラー発生時に呼び出されるハンドラ関数. */ void (*handler )(long val , const char* vname, const char* file, int line, const char* func); /** 数値比較時のアサーションエラー発生時に呼び出されるハンドラ関数. */ void (*handler_num)(long v1, long v2 , const char* vname, const char* file, int line, const char* func); /** 文字列比較時のアサーションエラー発生時に呼び出されるハンドラ関数. */ void (*handler_str)(const char* v1, const char* v2 , const char* vname, const char* file, int line, const char* func); /** メモリ比較時のアサーションエラー発生時に呼び出されるハンドラ関数. */ void (*handler_mem)(const void* v1, const void* v2, size_t size, const char* vname, const char* file, int line, const char* func); /** * アサーションの前処理として呼び出されるハンドラ関数. * @param is_error true/false (アサーションエラー発生/エラーなし) */ void (*handler_bef)(bool is_error); /** * アサーションの後処理として呼び出されるハンドラ関数. * @param is_error true/false (アサーションエラー発生/エラーなし) */ void (*handler_aft)(bool is_error); } NstdcAssertHandlers; void nstdc_assert_ ( long val , const char* vname, const char* file, int line, const char* func); void nstdc_assert_num_( long v1, long v2 , const char* vname, const char* file, int line, const char* func); void nstdc_assert_str_( const char* v1, const char* v2 , const char* vname, const char* file, int line, const char* func); void nstdc_assert_mem_( const char* v1, const char* v2, size_t size, const char* vname, const char* file, int line, const char* func); void nstdc_assert_set_handlers(NstdcAssertHandlers* handlers); #ifdef __cplusplus } #endif #endif /* NSTDC_ASSERT_H */