前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | 每日一练(133)

基础知识 | 每日一练(133)

作者头像
小林C语言
发布2019-10-10 16:35:52
2850
发布2019-10-10 16:35:52
举报
文章被收录于专栏:C语言入门到精通

基础知识练

士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ——菜根谭

读者:为什么调用 printf() 前, 必须要用 #include <stdio.h>?

小林:为了把 printf() 的正确原型说明引入作用域。对于用可变参数的函数, 编译器可能用不同的调用次序。例如, 如果可变参数的调用比固定参数的调用效率低。所以在调用可变参数的函数前, 它的原型说明必须在作用域内, 编译器由此知道要用不定长调用机制。在原型说明中用省略号“...” 来表示可变参数。

读者:为什么 %f 可以在 printf() 参数中, 同时表示 float 和 double?他

们难道不是不同类型吗?

小林:“参数默认晋级” 规则适用于在可变参数中的可变动部分: char 和 short int 晋级到 int, float 晋级到 double。同样的晋级也适用于在作用域中没有原型说明的函数调用, 即所谓的 “旧风格” 函数调用, 参见问题 11.4。所以 printf 的 %f 格式总是得到 double。类似的, %c 总是得到 int, %hd 也是。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档