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__)