Categories:
.NET (357)
C (330)
C++ (183)
CSS (84)
DBA (2)
General (7)
HTML (4)
Java (574)
JavaScript (106)
JSP (66)
Oracle (114)
Perl (46)
Perl (1)
PHP (1)
PL/SQL (1)
RSS (51)
Software QA (13)
SQL Server (1)
Windows (1)
XHTML (173)
Other Resources:
How can I include expansions of the macros .....
How can I include expansions of the __FILE__ and __LINE__ macros in a general-purpose debugging macro?
✍: Guest
One solution involves writing your debug macro in terms of a varargs function , and an auxiliary function which stashes the values of __FILE__ and __LINE__ away in static variables, as in:
#include <stdio.h>
#include <stdarg.h>
void debug(const char *, ...);
void dbginfo(int, const char *);
#define DEBUG dbginfo(__LINE__, __FILE__), debug
static const char *dbgfile;
static int dbgline;
void dbginfo(int line, const char *file)
{
dbgfile = file;
dbgline = line;
}
void debug(const char *fmt, ...)
{
va_list argp;
fprintf(stderr, "DEBUG: "%s", line %d: ", dbgfile, dbgline);
va_start(argp, fmt);
vfprintf(stderr, fmt, argp);
va_end(argp);
fprintf(stderr, "\n");
}
With this machinery in place, a call to
DEBUG("i is %d", i);
expands to
dbginfo(__LINE__, __FILE__), debug("i is %d", i);
and prints something like
DEBUG: "x.c", line 10: i is 42
A cunning improvement is the idea of having the stashing function return a pointer to the bona-fide varargs function:
void debug(const char *, ...);
void (*dbginfo(int, const char *))(const char *, ...);
#define DEBUG (*dbginfo(__LINE__, __FILE__))
void (*dbginfo(int line, const char *file))(const char *, ...)
{
dbgfile = file;
dbgline = line;
return debug;
}
With these definitions,
DEBUG("i is %d", i);
gets expanded to
(*dbginfo(__LINE__, __FILE__))("i is %d", i);
Another, perhaps easier way might simply be to
#define DEBUG printf("DEBUG: "%s", line %d: ", \
__FILE__,__LINE__),printf
Now,
DEBUG("i is %d", i);
simply expands to
printf("DEBUG: "%s", line %d: ",
__FILE__,__LINE__),printf("i is %d", i);
Finally, you may be able to use the
#define _ ,
2016-01-15, 1703👍, 0💬
Popular Posts:
.NET INTERVIEW QUESTIONS - What is Multi-tasking ? It’s a feature of modern operating systems with w...
How To Recover a Dropped Index? - Oracle DBA FAQ - Managing Oracle Table Indexes If you have the rec...
How To Retrieve Input Values for Checkboxes Properly? - PHP Script Tips - Processing Web Forms If mu...
Rachel opened her math book and found that the sum of the facing pages was 245. What pages did she o...
What are different properties provided by Objectoriented systems ? Following are characteristic’s of...