比如要封装一个打印函数,打印内容在最后,入口时 myprint1 ,后续时 myprint2 ,。。。,参数要如何写?
```
void myprint1(uint8_t *pdata, size_t len, char *fmt, ...)
{
        myprint2(fmt,...);                // 这里参数怎么写
}

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

```
谢谢
举报· 63 次点击
登录 注册 站外分享
6 条回复  
sadfasdfa 小成 2024-8-27 13:26:06

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

使用宏定义和__VA_ARGS__,90%小白问题都能用浏览器解决
agagega 小成 2024-8-27 13:26:52

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

用 __VA_ARGS__

https://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html
felixlong 小成 2024-8-27 13:31:43

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

vprintf
https://cplusplus.com/reference/cstdio/vprintf/
valord577 小成 2024-8-27 13:34:28

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

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 小成 2024-8-27 13:39:00

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

1.如果函数的参数,或函数的返回值,过于复杂,我个人倾向于,直接把该函数的参数或返回值,定义为数据结构,也就是结构体或类。

2.参数长度不确定,可以直接传参一个容器,比如 array 、list 、map 、set 等等。
codehz 初学 2024-8-27 19:29:16

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

没有带 v 函数的的情况下,可以用 https://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html 来解决(
返回顶部