+ fprintf(stderr, "[%s:%d] [INFO] ", fileName, __LINE__); \
+ fprintf(stderr, format, ##__VA_ARGS__); \
+ fprintf(stderr, "\n"); \
+ } while (0);
+
+#define LOG_D(format, ...) \
+ do { \
+ const char *file = __FILE__; \
+ const char *fileName = strrchr(file, '/'); \
+ if (fileName != NULL) { \
+ fileName++; \
+ } \
+ else { \
+ fileName = file; \
+ } \
+ fprintf(stderr, "[%s:%d] [DEBUG] ", fileName, __LINE__); \
+ fprintf(stderr, format, ##__VA_ARGS__); \
+ fprintf(stderr, "\n"); \
+ } while (0);
+
+#define LOG_E(format, ...) \
+ do { \
+ const char *file = __FILE__; \
+ const char *fileName = strrchr(file, '/'); \
+ if (fileName != NULL) { \
+ fileName++; \
+ } \
+ else { \
+ fileName = file; \
+ } \
+ fprintf(stderr, "[%s:%d] [ERROR] ", fileName, __LINE__); \
+ fprintf(stderr, format, ##__VA_ARGS__); \
+ fprintf(stderr, "\n"); \