📄 error.h
字号:
/** * Copyright (C) 2005-2007 Christoph Rupp (chris@crupp.de). * All rights reserved. See file LICENSE for licence and copyright * information. * * this file has error logging routines and a strerror() replacement * */#ifndef HAM_ERROR_H__#define HAM_ERROR_H__#ifdef __cplusplusextern "C" {#endif #include <ham/types.h>/** * function prototypes */extern void dbg_lock(void);extern void dbg_unlock(void);extern void dbg_prepare(const char *file, int line, const char *expr);extern void dbg_log(const char *format, ...);extern void dbg_verify_failed(const char *format, ...);/** * in debug mode we write trace()-messages to stderr, and assert() * is enabled. * * not every preprocessor supports ellipsis as macro-arguments - * therefore we have to use brackets, so preprocessors treat multiple * arguments like a single argument. and we need to lock the output, * otherwise we are not thread-safe. this is super-ugly. */#ifdef HAM_DEBUG# define ham_trace(f) do { \ dbg_lock(); \ dbg_prepare(__FILE__, __LINE__, 0); \ dbg_log f; \ dbg_unlock(); \ } while (0)# define ham_assert(e, f) if (!(e)) { \ dbg_lock(); \ dbg_prepare(__FILE__, __LINE__, #e); \ dbg_verify_failed f; \ dbg_unlock(); \ }#else /* !HAM_DEBUG */# define ham_trace(f) # define ham_assert(e, f) #endif /* HAM_DEBUG *//** * log() and verify() are available in every build */#define ham_log(f) do { \ dbg_lock(); \ dbg_prepare(__FILE__, __LINE__, 0); \ dbg_log f; \ dbg_unlock(); \ } while (0)#define ham_verify(e, f) if (!(e)) { \ dbg_lock(); \ dbg_prepare(__FILE__, __LINE__, #e); \ dbg_verify_failed f; \ dbg_unlock(); \ }#ifdef __cplusplus} // extern "C"#endif #endif /* HAM_ERROR_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -