日期:2014-05-16  浏览次数:21506 次

日志打印接口 编译时出现:error: ‘va_start’ used in function with fixed args
现在 在写一个日志接口:
主要想采用vsnprintf 和va_start() 系统调用, 基本要实现类似下面的功能;但是每次日志打印testlog.c和TLOGDEBUG(),这些是日志接口的信息,而非调用接口处的文件和函数。
[debug][2013-04-09 14:18:20] [testlog.c:TLOGDEBUG():189]

出现上面情况主要是把__FILE__,__FUNCTION__,__LINE__封装到日志接口函数内部实现中,未了避免是上面情况,把__FILE__等信息作为入参传入日志接口中。先定义两个宏,但是编译时出现error: ‘va_start’ used in function with fixed args。不知道什么原因?大家请帮忙看下,对下面的定义,大家有什么好的想法可以绕过这个坑。


 83 #define LOGDEBUG(File,Func,Line,fmt, ...) do { \
 84         va_list ap; \
 85         va_start(ap, fmt); \
 86         LOGFUNC(File, Func, Line,fmt,ap,Debug );\
 87         va_end(ap); \
 88 } \
 89 while(0)
 90 
 91                                                                                                                                                  
 92 #define TLOGDEBUG(fmt, ... )do { \                                                                                                               
 93     LOGDEBUG(__FILE__,__FUNCTION__,__LINE__,fmt, ...); \                                                                                         
 94 } \                                                                                                &nb