gpt4 book ai didi

c - 如何在VC++6.0中模仿可变参数宏?

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:36 24 4
gpt4 key购买 nike

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, ...).

有什么宏技巧可以帮助我吗?或者我最好使用显式参数并习惯冗余?

最佳答案

#define IND_FP Logger(indent)

class Logger {
public:
Logger(int indent);
int operator()(FILE* fp, char* format, ...);
private:
// an exercise for the reader
};

关于c - 如何在VC++6.0中模仿可变参数宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23853332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com