请问个有关问题。两个具有可变参数的函数怎么关联
请教个问题。两个具有可变参数的函数如何关联。
如果两个函数的内容功能是一样的,但函数名不同,请问有什么方法可以将两都关联起来啊?主要是因为这两个函数的参数都是可变参数。取个例子,就像是printf(const char *format,[argument]),又有另外一个函数printf1(const char *format,[argument])与printf()一样.但我调用时只能调用printf1。请问这要怎么解决啊?
------解决方案--------------------
内部的printf接口需要改变一下,模仿vprintf即可,给你写了一段示例,希望你能从根本原理认识这个问题:
#include <stdarg.h>
void va_start(va_list ap, last);
type va_arg(va_list ap, type);
void va_end(va_list ap);
void va_copy(va_list dest, va_list src);
如果两个函数的内容功能是一样的,但函数名不同,请问有什么方法可以将两都关联起来啊?主要是因为这两个函数的参数都是可变参数。取个例子,就像是printf(const char *format,[argument]),又有另外一个函数printf1(const char *format,[argument])与printf()一样.但我调用时只能调用printf1。请问这要怎么解决啊?
------解决方案--------------------
内部的printf接口需要改变一下,模仿vprintf即可,给你写了一段示例,希望你能从根本原理认识这个问题:
#include <stdarg.h>
void va_start(va_list ap, last);
type va_arg(va_list ap, type);
void va_end(va_list ap);
void va_copy(va_list dest, va_list src);
- C/C++ code
[User:root Time:13:03:06 Path:/home/liangdong/c]$ ./output 123 [User:root Time:13:03:07 Path:/home/liangdong/c]$ cat src/main.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> void inner_printf(const char *format, va_list args) { // 懒得写args的解析了, 写死一个int参数,忽略解析format, // 演示一下用法就好了。 int n = va_arg(args, int); printf("%d\n", n); va_end(args); //unnecessary here } void wrapper_printf(const char *format, ...) { va_list args; va_start(args, format); inner_printf(format, args); //may use va_copy, but not necessary va_end(args); //unnecessary if nothing to do below } int main(int argc, char* const argv[]) { wrapper_printf("format is ignore\n", 123); return 0; }