01-sdef
#ifndef SDEF_H #define SDEF_H #define __RETURN_RET_IF(condition, ret, log) do { \ if (condition) { \ log("failure message: %s", #condition); \ return (ret); \ } \ } while(0) #define __RETURN_IF(condition, log) do { \ if (condition) { \ log("failure message: %s", #condition); \ return; \ } \ } while(0) #define __GOTO_EXIT_IF(condition, exit, log) do { \ if (condition) { \ log("failure message: %s", #condition); \ goto exit; \ } \ } while (0) #endif #define __BREAK_IF(condition) \ if (condition) { \ break; \ } #define __LOG_IF(x, log) do { \ if (x) { \ log("failure message: %s", #x); \ } \ } while (0) #define _RETURN_RET_IF(condition, ret, log, fmt, args...) do { \ if (condition) { \ log(fmt, ##args); \ return (ret); \ } \ } while(0) #define _RETURN_IF(condition, log, fmt, args...) do { \ if (condition) { \ log(fmt, ##args); \ return; \ } \ } while(0) #define _GOTO_EXIT_IF(condition, exit, log, fmt, args...) do { \ if (condition) { \ log(fmt, ##args); \ goto exit; \ } \ } while (0) #define _BREAK_IF(condition, log, fmt, args...) \ if (condition) { \ log(fmt, ##args); \ break; \ } #define _LOG_IF(x, log, fmt, args...) do { \ if (x) { \ log(fmt, ##args); \ } \ } while (0) #include <stdio.h> #define log(fmt, ...) printf("[%s] "fmt"\n", __FUNCTION__, ##__VA_ARGS__) #define log_err(fmt, args...) printf("[E][LOG]<%s %s %d> "fmt"\n", __builtin_strrchr(__FILE__, '\\') ? __builtin_strrchr(__FILE__, '\\') + 1 : __FILE__, __FUNCTION__, __LINE__, ##args) #define RETURN_RET_IF(condition, ret) _RETURN_RET_IF(condition, ret, log_err, "failure message: %s", #condition) #define RETURN_IF(condition) _RETURN_IF(condition, log_err, "failure message: %s", #condition) #define GOTO_EXIT_IF(condition, exit) _GOTO_EXIT_IF(condition, exit, log_err, "failure message: %s", #condition) #define BREAK_IF(condition) _BREAK_IF(condition, log_err, "failure message: %s", #condition) #define LOGE_IF(x) _LOG_IF(x, log_err, "log_if: msg: %s", #x) // #define XX_LOG_IF(x) __LOG_IF(x, XX_LOGE) // #define XX_RETURN_RET_IF(condition, ret) __RETURN_RET_IF(condition, ret, XX_LOGE) // #define XX_RETURN_IF(condition) __RETURN_IF(condition, XX_LOGE) // #define XX_GOTO_EXIT_IF(condition, exit) __GOTO_EXIT_IF(condition, exit, XX_LOGE) // #define XX_BREAK_IF(condition) __BREAK_IF(condition)
#endif /* SDEF_H */