函数能否实现透传不定长度参数,最终由 printf 打印

73 天前
 smdbh

比如要封装一个打印函数,打印内容在最后,入口时 myprint1 ,后续时 myprint2 ,。。。,参数要如何写?

void myprint1(uint8_t *pdata, size_t len, char *fmt, ...)
{
	myprint2(fmt,...);		// 这里参数怎么写
}

void mprint2(char *fmt, ...)
{
	printf(fmt,...);		// 如何调用
}

谢谢

1564 次点击
所在节点    C
7 条回复
smdbh
73 天前
va_list 感觉只能在最后解析,调用 vprintf 打印,如果多层感觉实现不了
sadfasdfa
73 天前
使用宏定义和__VA_ARGS__,90%小白问题都能用浏览器解决
agagega
73 天前
felixlong
73 天前
valord577
73 天前
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);
}
```
laminux29
73 天前
1.如果函数的参数,或函数的返回值,过于复杂,我个人倾向于,直接把该函数的参数或返回值,定义为数据结构,也就是结构体或类。

2.参数长度不确定,可以直接传参一个容器,比如 array 、list 、map 、set 等等。
codehz
73 天前
没有带 v 函数的的情况下,可以用 https://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html 来解决(

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1068118

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX