c - 如何在可变参数函数中抛出类型错误,如 printf throws 中的错误
问题描述
如果我使用 编译gcc
,并且启用了Wall
andWerror
标志,我将能够在使用 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 做的事情。
解决方案
推荐阅读
- python - 无法在pycharm中安装cvxpy
- java - 如何使用 SearchView 过滤列表视图
- javascript - 如何访问 ECS 托管的应用程序?
- c# - 如何在 c# MEF 插件中对空洞进行分组
- java - 使用 poi 进行 Excel 渲染,一列被缩小
- entity-framework - 弱实体具有强实体与其相关实体之间关系的外键的情况是否方便?
- r - 使用 R ggplot2 生成 LaTeX 风格的散点图
- wordpress - 无法从 wordpress 插件中的抽象类函数初始化类的实例
- java - 如何更干净地编写这个 Java 代码片段
- sql - SQL查询中WHERE条件下CASE语句的执行