#ifndef PN_LOG_H #define PN_LOG_H void _pn_helper(unsigned level, void *object, const char *file, const char *function, unsigned line, const char *fmt, ...) __attribute__((format(printf, 6, 7))); #define pn_base(level, object, ...) _pn_helper(level, object, __FILE__, __func__, __LINE__, __VA_ARGS__) #define pn_err(object, ...) pn_base(0, object, __VA_ARGS__) #define pn_warn(object, ...) pn_base(1, object, __VA_ARGS__) #define pn_test(object, ...) pn_base(2, object, __VA_ARGS__) #define pn_info(object, ...) pn_base(3, object, __VA_ARGS__) #if defined(DEBUG) #define pn_debug(object, ...) pn_base(4, object, __VA_ARGS__) #else #define pn_debug(object, ...) ({ if (0) pn_base(4, object, __VA_ARGS__); }) #endif #endif /* PN_LOG_H */