text: #ifndef __LOG_H
  #define __LOG_H
  
  #ifdef _WIN32
  # define LogMessage(fmt, ...) fprintf(stderr, fmt, __VA_ARGS__), fputc('\n', stderr), fflush(stderr)
  #else
  # ifdef NDEBUG
  #  define l_debug(format...)
  #  define DebugLog
  # else
  #  define l_debug(format...) do {               \
           l_debug_(__FUNCTION__, ## format);     \
       } while (false)
  #  define DebugLog l_debug
  # endif
  
  # define l_message(format...) do {              \
          l_message_(__FUNCTION__, ## format);    \
      } while (false)
  
  # define l_warning(format...) do {              \
          l_warning_(__FUNCTION__, ## format);    \
      } while (false)
  
  # define l_error(format...) do {                \
          l_error_(__FUNCTION__, ## format);      \
      } while (false)
  
  // A more windowsy looking routine.
  # define LogMessage(format...) do {             \
           l_message_(__FUNCTION__, ## format);   \
       } while (false)
  #endif
  
  void l_message_(const char *function, const char *format, ...);
  void l_debug_(const char *function, const char *format, ...);
  void l_warning_(const char *function, const char *format, ...);
  void l_error_(const char *function, const char *format, ...);
  
  #endif
  