|
代码如下:
- debian@debian:~/network$ cat test.c
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/errno.h>
- #include <stdarg.h>
- #define logFP stdout
- #define LOGBUFLEN 512
- void pErr(int flag,char *fmt,...)
- {
- if(NULL == logFP)
- {
- printf("log file pointer is null\n");
- return;
- }
- char pBuf [LOGBUFLEN + 1];
- int savedErrno = errno;
- bzero(pBuf,LOGBUFLEN + 1);
- va_list al;
- va_start(al,fmt);
- vsprintf(pBuf,fmt,al);
- if(flag)
- {
- sprintf(pBuf + strlen(pBuf),": %s",strerror(savedErrno));
- }
- strcat(pBuf,"\n");
- fputs(pBuf,logFP);
- va_end(al);
- };
- #define pErrQuit(flag,fmt,...) \
- {pErr(flag,fmt,__VA_ARGS__); \
- exit(-1); \
- }
- int main()
- {
- int i = 10;
- pErrQuit(0,"i is %d",i);/* 这样展开宏没有问题*/
- pErrQuit(0,"i is null"); /* 这里编译的时候error: expected expression before ')' token */
- return 0;
- }
复制代码
请高手帮忙解决. |
|