首页 > 解决方案 > 如何在可变参数函数中抛出类型错误,如 printf throws 中的错误

问题描述

如果我使用 编译gcc,并且启用了WallandWerror标志,我将能够在使用 printf 函数并中断编译时捕获如下错误。

main.c:40:5: error: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘char *’ [-Werror=format=]
     printf("Len:[%d]\n", "str");

在这里,我使用%d格式说明符,但在编译时传递char *gcc检测到它。所以我的问题是如何在我的程序中实现这样的错误抛出。为了详细说明我的意思,假设我正在使用可变参数函数和 write 函数(来自库)制作自己的自定义 printf 函数unistd,当格式说明符和 va_list 中的项目没有时,我将如何让 gcc 编译器抛出错误'没有相同的数据类型。

所以我的自定义 printf 将具有以下原型。 int _printf(const char *format, ...);

所以我希望 gcc 编译器在有人想像使用_printf("Len:[%d]\n", "str");普通 printf 函数一样使用我的 printf 函数时抛出错误。

我不知道从哪里开始或实际寻找什么?我是否阅读了有关 GCC 的更多信息,或者这只是我可以用 c 做的事情。

标签: cgccerror-handlingcompilation

解决方案


推荐阅读