在VS2010中,我编写了以下可变参数宏来将信息转储到文件中。
#define INDENT(fp, indent) for(size_t __i = 0; __i < (indent); ++__i) fprintf((fp), " ")
// IND_FP = indented fprintf.
// This macro uses two IMPLICIT parameters.
// 1. (FILE *)fp is a pointer to the output file.
// 2. (size_t)indent specifies the indentation level.
#define IND_FP(format, ...) do{ INDENT(fp, indent); fprintf(fp, format, __VA_ARGS__); }while(0)
这些宏经常出现在我的程序中。
void CMAP::dump_info(FILE *fp, size_t indent){
IND_FP("<cmap tableVersion=\"0x%08x\" numberOfEncodingTables=\"%d\">\n",
table_version_number, num_encoding_tables);
//...
IND_FP("</cmap>\n");
}
可悲的是,现在我必须将我的代码迁移到不支持可变参数宏的上古 IDE VC ++ 6.0 。我写了一个可变参数函数。
void IND_FP(FILE *fp, size_t indent, char *format, ...){
INDENT(fp, indent);
va_list arg_ptr;
va_start(arg_ptr, format);
vfprintf(fp, format, arg_ptr);
va_end(arg_ptr);
}
但是我必须将数十行甚至数百行代码IND_FP(format, ...)
从IND_FP(fp, indent, format, ...)
.
有什么可以帮助我的宏技巧吗?或者我最好使用显式参数并习惯冗余?