typedef struct LogWhere_s { const char *file; const char *func; const int line; char pad[sizeof(void *) - sizeof(int)]; } LogWhereData; #define LogWhere() ((LogWhereData){.file = __FILE__, .line = __LINE__, .func = __func__}) void LogTraceFunc(const LogWhereData where, const char *fmt, ...); #define LogTrace(fmt) LogTraceFunc(LogWhere(), fmt) #define LogTracef(fmt, ...) LogTraceFunc(LogWhere(), fmt, __VA_ARGS__)