printf格式化输出的原理是什么? 在小端32位机器上long long int a = 1, b =2, c = 3;printf(“%d %d %d”, a, b,c)为什么输出结果是1 0 2 这个问题确实进入了”深水区”, 倒不是因为问题本身有多难, 而是 函数源代码如未开放, 那么这个问题就是无解的, 任何强答都是存疑的. 首先这段代码, 任何”正经的”编译器(开个玩笑, 这里指类似 编译开关应开启. 如果更宽容些, 一般的 编译开关即默认都成), 都应会提示 Warning: “即从 向 格式输出, 将出现不兼容”. 其次, 可以通过给予不同的 argument 类型变换, 以及更换输出格式获得正确的输出, 如下: 最后, 根据上述测试, 或能给出这样的推测(答主不保证, 毕竟 printf 函数源码是黑盒): (1) printf 不保证 rank 不同时, argument 与 format 对应类型之前, 发生任何隐式转换. 本例中期待其降低 range/precision 的”conversion” 并未发生. (2) 但 rank 相同时, 比如 与 之间则可能与上述规则又不同(或 cast 发生). 补充: 谢谢评论提醒, 了解 printf 源代码, 在 GCC, the GNU Compiler Collection 的各个链接跳转皆可找到各个历史版本下载, 从 ftp 网站即可下载后解压, 也没必要非要用 git. 答主的以上的回答, 皆来自 iar/ARM8.32.1 版本的测试, 刚好参与讨论的同好电脑不在手上, 没有 gcc 验证. 以上回答, 不保证 gcc 的 printf 的实现方式. — 烦请自测, 勿被我的平台限制(测试结果: 已与 gcc 比较测试, 两者 printf 在参数 type 与 format type 不一致时, 表现几乎完全不同. 共享该现象). 答主测试使用之 printf, 应为 IAR 自有版权, 非 GNU, 故未有查阅源码之想法. 补充上述作答的条件, 希望对 C 语言学习者深入库文件时能带来帮助. – 挺好哒, 将来自己写 C 语言编译器时,,, 因为答主一眼都没瞧过 GCC, 谁也不能逼答主根据 GNU 共享源代码… 再次对评论sigusoft, 库函数有标准, 但其完成决定于各家实现, 何来”原理”! 即便将 gcc 弄个清楚, 也不妨碍 iccarm 对本问题给出完全不同的回答. –iccarm 对本问题的回答是 0, 1, 0, 现在这个问题是不是连”原理”讨论的基础都没有了? 怎么好像都只知道 gcc/gnu, 不晓得真实的嵌入式世界的编译器被 keil/iar 霸榜? 估计嵌入式工程师都忙于使用工具搞项目, 像我这样愿意花时间共享的少之又少. 哎. 提示所有学习者:而且真的, 始终有点怀疑,,, 一旦真的深究 gcc, 爬它的库文件. 其实就暗示了失去了某种未来的可能, gnu 的自由说不定, 是种”强制”的自由, “霸道”的共享. 可能作为某个初学者, 因阅读 gnu, 反而失去了本应无限的可能… 一旦不愿意被迫参加 gnu 的共享, 那么就失去了任何掺有 gnu “色彩”的项目自由. 我的一点猜想, 不一定对… 给想阅读 gnu 的学习者的参考. 本问题隐含着一个”坑”, 尽管提问者可能非恶意….试图深究 gcc 库函数的学习者, 在开启源码学习计划(推测学习周期数周以上)之前, 或先询问自己是否值得? 想想用钱购买的自由, 和共享免费的”自由”, 谁才是真的自由?
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/67809.html