比如要封装一个打印函数,打印内容在最后,入口时 myprint1 ,后续时 myprint2 ,。。。,参数要如何写?
void myprint1(uint8_t *pdata, size_t len, char *fmt, ...)
{
myprint2(fmt,...); // 这里参数怎么写
}
void mprint2(char *fmt, ...)
{
printf(fmt,...); // 如何调用
}
谢谢
1
smdbh OP va_list 感觉只能在最后解析,调用 vprintf 打印,如果多层感觉实现不了
|
2
sadfasdfa 121 天前 via iPhone
使用宏定义和__VA_ARGS__,90%小白问题都能用浏览器解决
|
3
agagega 121 天前
|
4
felixlong 121 天前
|
5
valord577 121 天前
https://linux.die.net/man/3/vasprintf
不确定 vasprintf 是不是你想要的函数 ```c void mprint2(char* strp, ...) { } void mprint1(uint8_t *pdata, size_t len, char *fmt, ...) { char* strp = NULL; (void)vasprintf(&strp, fmt, ...); mprint2(strp); } ``` |
6
laminux29 121 天前
1.如果函数的参数,或函数的返回值,过于复杂,我个人倾向于,直接把该函数的参数或返回值,定义为数据结构,也就是结构体或类。
2.参数长度不确定,可以直接传参一个容器,比如 array 、list 、map 、set 等等。 |
7
codehz 121 天前
没有带 v 函数的的情况下,可以用 https://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html 来解决(
|