白姐透特今晚开什么码

打印

请教下C中printf的具体实现原理

[复制链接]
130|6
跳转到指定楼层
楼主
本帖最后由 过路人1024 于 2019-12-17 11:30 编辑

其实我主要是搞不懂为什么这个函数能让编译器报这个警告:Warning[Pe224]: the format string requires additional arguments C:\Users\Administrator\Documents\IAR_Project\stdarg_test\main.c 7
我知道这个警告什么意思、是什么原因导致的。
--------------------------------------------------------------------------------------
#include <stdio.h>
void main(void)
{
  printf("test%d");
  while(1);
}
--------------------------------------------------------------------------------------
按理说函数printf第二个参数之后都是可变参数,根据语法规则完全可以不加的吧。但是它为什么能凭借%d来判断没有第二个参数是有问题的呢?(甚至能判断有没有可变参数)这个在预处理阶段还是编译阶段发现的?编译器给出的警告或错误应该都是根据C语法规则判断的吧,理论上printf("test%d")也是符合语法的吧?
我知道可变参数的用法,但是据我所知C库stdarg并不能判断可变参数的数量,然而printf感觉不仅能判断,还能给出警告。所以这到底怎么实现的呢?

相关资料

沙发
 楼主|2019-12-17 14:22|只看该作者
板凳
 楼主|2019-12-17 21:23|只看该作者
地板
|2019-12-18 12:52|只看该作者
5
|2019-12-18 14:38|只看该作者
百度,“printf源码”
6
|2019-12-18 17:03|只看该作者
%d需要对应的参数,人家好心提示你,你还不买账
7
|2019-12-22 18:27|只看该作者
输出参数不匹配嘛
扫描二维码,随时随地手机跟帖

本版积分规则

我要发帖投诉建议创建版块

快速回复

您需要登录后才可以回帖
登录 | 注册

论坛热帖

关闭

热门推荐上一条 /6 下一条

在线客服 快速回复 返回顶部返回列表