如何编写可直接透传可变参数给printf的自定义函数,无需手动处理参数
实现方法
C 语言不支持你示例中直接写 printf(question, ...) 的透传语法,但可以通过 <stdarg.h> 提供的工具配合 vprintf 实现需求,全程不需要手动解析可变参数,仅需要增加几行固定模板代码即可:
#include <stdio.h> #include <stdarg.h> void lee(char* question, ...) { /* 你的前置自定义代码 */ va_list args; va_start(args, question); vprintf(question, args); va_end(args); /* 你的后置自定义代码 */ }
说明
- 上述代码中可变参数相关的4行代码是固定模板,不需要理解底层实现直接套用即可,所有传入
lee函数的参数会原样传递给vprintf,输出效果和直接调用printf完全一致 - 如果后续需要封装输出到文件、输出到字符串的逻辑,只需要把
vprintf替换为对应的vfprintf、vsprintf、vsnprintf即可,参数处理的逻辑不用做任何修改 - 调用示例:
// 调用lee函数,效果和直接执行printf完全相同 lee("菜单选项%d:%s\n", 1, "用户登录");
内容的提问来源于stack exchange,提问作者Ica Polinesio GarLop
相关产品推荐
相关产品推荐

