完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
有人知道如何让vasprintF运行吗?
我正在尝试挂钩 os_printf() 以允许它通过多个函数,但是我似乎无法通过将 arg 作为传递给嵌套函数来正确呈现 VA 列表。 对于下面的函数,我一直没有得到未定义,但是当我用其他东西替换它时,我得到了无效的到达。有人让这个小片段起作用吗? 法典:全选 void * user_printfHook[2] = {NULL, NULL}; 无效 * ICACHE_FLASH_ATTR user_printf(const char *s, ...) { /* os_printf("[%s]n", __func__); int i=0; os_printf("a"); for (i=0; i<(sizeof(user_printfHook)/4); i++) { os_printf("b"); if (user_printfHook[i] != NULL) { os_printf("c"); ((void (*)(const char *))user_printfHook[i])(s); } } */ os_printf("1"); va_list args; os_printf("2"); va_start(args, s); os_printf("3"); ets_vprintf(ets_putc, s, args); os_printf("4"); va_end(args); os_printf("5"); } *更新* 这很好用... 法典:全选 void write_mychar(char ch) { os_printf("%c", ch); } 无效 * ICACHE_FLASH_ATTR user_printf(const char *s, ...) { int i=0; for (i=0; i<(sizeof(user_printfHook)/4); i++) { if (user_printfHook[i] != NULL) { ((void (*)(const char *))user_printfHook[i])(s); } } va_list args; va_start(args, s); ets_vprintf(write_mychar, s, args); va_end(args); } 我认为这最终需要指向ets_putc或其他东西,但它似乎没有定义。 |
|
相关推荐
1个回答
|
|
要让vasprintf函数正常运行,您需要正确地使用可变参数列表(va_list)。在您的代码中,您需要使用`va_start`、`va_arg`和`va_end`宏来操作可变参数列表。以下是一个修改后的示例,展示了如何使用这些宏来实现您的目标:
```c #include #include void *user_printfHook[2] = {NULL, NULL}; void ICACHE_FLASH_ATTR user_printf(const char *s, ...) { va_list args; va_start(args, s); // 打印函数名 os_printf("[%s]n", __func__); // 遍历可变参数列表 for (int i = 0; i < 2; i++) { if (user_printfHook[i] != NULL) { // 调用嵌套函数 ((void (*)())user_printfHook[i])(args); } } va_end(args); } // 示例嵌套函数 void example_hook_function(va_list args) { int arg; while ((arg = va_arg(args, int)) != -1) { os_printf("a: %dn", arg); } } int main() { // 设置钩子函数 user_printfHook[0] = (void *)example_hook_function; // 调用user_printf user_printf("Hello, World!", 1, 2, 3, -1); return 0; } ``` 在这个示例中,我们首先使用`va_start`宏初始化可变参数列表。然后,我们遍历`user_printfHook`数组,调用每个钩子函数。在每个钩子函数中,我们使用`va_arg`宏从可变参数列表中获取参数。最后,使用`va_end`宏清理可变参数列表。 请注意,这个示例仅用于演示如何使用可变参数列表。您需要根据您的具体需求调整代码。 |
|
|
|
只有小组成员才能发言,加入小组>>
524浏览 6评论
433浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
422浏览 5评论
414浏览 4评论
387浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 03:27 , Processed in 1.082606 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号