有一个记录日志的函数,想用宏定义进行包装,简化调用方法,但是xlc报如下的错误:

void _log(const int level, char* file, int line, const char* fmt, ...){
	va_list ap;	int count;	time_t t;	struct tm* st;	char str_time[255];	memset(str_time, 0x00, sizeof(str_time));	time(&t);
	st= localtime(&t);	switch(level){		case DEBUG:				fprintf(stdout, "[DEBUG]	");				break;		case INFO:				fprintf(stdout, "[INFO]	");				break;		case WARNING:				fprintf(stdout, "[WARNING]	");				break;		case ERROR:				fprintf(stdout, "[ERROR]	");				break;		default:				fprintf(stdout, "[INFO]	");				break;
	}	strftime( str_time, sizeof(str_time), "%Y-%m-%d %H:%M:%S", st);	fprintf(stdout, "[%s] LINE:[%04d] [%s] ", file, line, str_time);	va_start(ap, fmt);
	count = vfprintf(stdout, fmt, ap);	fprintf(stdout, "\n");	fflush(stdout);	va_end(ap);
}#define log_info(...) _log((INFO), (__FILE__), (__LINE__), "", (#__VA_ARGS__))#define log_err(...) _log((ERROR), (__FILE__), (__LINE__), "", (#__VA_ARGS__))
Syntax error at line 71, column 18, file RProCrminfo.cp:

Error at line 71, column 18 in file RProCrminfo.cp

  • define log_info((aaa), ...) _log((INFO), (__FILE__), (__LINE__), "", (#__VA_ARG

S__))
.................1
PCC-S-02014, Encountered the symbol "(" when expecting one of the following:

) ... an identifier, define, elif, else, endif, error, if,
ifdef, ifndef, include, line, pragma, undef, exec, sql,
begin, end, var, type, oracle,
an immediate preprocessor command, a C token, create,
function, package, procedure, trigger, or, replace,
The symbol ")" was substituted for "(" to continue.


一只名叫tom的猫
浏览 131回答 1
1回答

婷婷同学_

早先一个项目woj-land里用到的,供参考#define&nbsp;FM_LOG_DEBUG(x...)&nbsp;&nbsp;&nbsp;log_write(LOG_DEBUG,&nbsp;__FILE__,&nbsp;__LINE__,&nbsp;##x)static&nbsp;void&nbsp;log_write(int&nbsp;level,&nbsp;const&nbsp;char&nbsp;*file,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;int&nbsp;line,&nbsp;const&nbsp;char&nbsp;*fmt,&nbsp;...){&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(log_opened&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"log_open&nbsp;not&nbsp;called&nbsp;yet\n");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;char&nbsp;buffer[log_buffer_size];&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;char&nbsp;datetime[100];&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;char&nbsp;line_str[20];&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;time_t&nbsp;now; &nbsp;&nbsp;&nbsp;&nbsp;now&nbsp;=&nbsp;time(NULL);&nbsp;&nbsp;&nbsp;&nbsp;strftime(datetime,&nbsp;99,&nbsp;"%Y-%m-%d&nbsp;%H:%M:%S",&nbsp;localtime(&now));&nbsp;&nbsp;&nbsp;&nbsp;snprintf(line_str,&nbsp;19,&nbsp;"%d",&nbsp;line); &nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;ap;&nbsp;&nbsp;&nbsp;&nbsp;va_start(ap,&nbsp;fmt);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;vsnprintf(log_buffer,&nbsp;log_buffer_size,&nbsp;fmt,&nbsp;ap);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;va_end(ap);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;count&nbsp;=&nbsp;snprintf(buffer,&nbsp;log_buffer_size,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"%s\x7&nbsp;[%s]\x7&nbsp;[%s:%d]%s\x7&nbsp;%s\x7\n",&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOG_LEVEL_NOTE[level],&nbsp;datetime,&nbsp;file,&nbsp;line,&nbsp;log_extra_info,&nbsp;log_buffer);&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;log_fd&nbsp;=&nbsp;log_fp->_fileno;&nbsp;&nbsp;&nbsp;&nbsp;//puts(buffer); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(flock(log_fd,&nbsp;LOCK_EX)&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(write(log_fd,&nbsp;buffer,&nbsp;count)&nbsp;<&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror("write&nbsp;error");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flock(log_fd,&nbsp;LOCK_UN); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror("flock&nbsp;error");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1); &nbsp;&nbsp;&nbsp;&nbsp;} }
打开App,查看更多内容
随时随地看视频慕课网APP