Excuse the horrible title, it's every keyword I can think of that describes this.
Here's the problem: You want to define a macro for logging, debugging or tracing that adds file and line number to a printf-style function, for instance
LOGIT("The count is %d", count); to "output"
[Myfile.c:123] The count is 123"
I forgot the syntax for vararg macros in C99/CPP, so did a search and got back horrible bloated answers that involved new C++ classes or things that use fixed size buffers. The simple way is to do something like this:
#define SYSLOG_TRACE(FMT, ARGS...) syslog(LOG_DEBUG, "[%s:%d] " FMT, __FILE__, __LINE__, ##ARGS) #define LOG_STDERR(FMT,ARGS...) fprintf(stderr, "[%s:%d] " FMT, __FILE__, __LINE__, ##ARGS)
Some quick notes: Recall, if two quoted strings are next to each such as
"a" "b" is considered to be one single string
"ab". I think that is standard C. The only GCC-ism is the
## which means "if there are no args, then remove that comma beforehand". If you aren't using GCC, I think you just need to define two macros, one with args, and one without.