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