比如要封装一个打印函数,打印内容在最后,入口时 myprint1 ,后续时 myprint2 ,。。。,参数要如何写?
void myprint1(uint8_t *pdata, size_t len, char *fmt, ...) { myprint2(fmt,...); // 这里参数怎么写 } void mprint2(char *fmt, ...) { printf(fmt,...); // 如何调用 }
/pre>谢谢
1 smdbh OP va_list 感觉只能在最后解析,调用 vprintf 打印,如果多层感觉实现不了 |
![]() | 2 sadfasdfa 2024-08-27 13:26:06 +08:00 via iPhone 使用宏定义和__VA_ARGS__,90%小白问题都能用浏览器解决 |
![]() | 3 agagega 2024-08-27 13:26:52 +08:00 |
4 felixlong 2024-08-27 13:31:43 +08:00 |
![]() | 5 valord577 2024-08-27 13:34:28 +08:00 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 2024-08-27 13:39:00 +08:00 1.如果函数的参数,或函数的返回值,过于复杂,我个人倾向于,直接把该函数的参数或返回值,定义为数据结构,也就是结构体或类。 2.参数长度不确定,可以直接传参一个容器,比如 array 、list 、map 、set 等等。 |
![]() | 7 codehz 2024-08-27 19:29:16 +08:00 没有带 v 函数的的情况下,可以用 https://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html 来解决( |