热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Printf参数顺序被忽略

如何解决《Printf参数顺序被忽略》经验,为你挑选了1个好方法。

我正在运行以下代码片段:

#include 
int main() {
   printf("%f %d\n", 42, 3.14);
}

令我惊讶的是,其中显示:

3.140000 42

编译器(基于Debian的发行版上的gcc 8.3.0)确实警告我有关参数的顺序:

test.c: In function ‘main’:
test.c:3:13: warning: format ‘%f’ expects argument of type ‘double’, but argument 2 has type ‘int’ [-Wformat=]
printf("%f %d\n", 42, 3.14);
        ~^        ~~
        %d
test.c:3:16: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘double’ [-Wformat=]
printf("%f %d\n", 42, 3.14);
           ~^         ~~~~
           %f

能比我更开明的灵魂向我解释这种行为吗?我在规范中没有发现任何可以解释的内容。



1> hobbs..:

在您的计算机上,恰好发生了这样的情况,即标准调用约定规定浮点参数将传递给与整数和其他参数分开的区域中的函数。您的printf格式字符串对第一个浮点参数和第一个非浮点参数感兴趣,即使您以错误的顺序传递了它们,它也会在预期的位置找到它们。当然,这不是您应该依靠的东西;如果您为其他机器进行编译,或者对代码进行了很小的更改,它可能会停止工作。


推荐阅读
author-avatar
maniac0207
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有