c - 函数返回更改为直接写在 printf 语句中
问题描述
#include <stdio.h>
#include <math.h>
int main() {
printf("%d\n", pow(3546, 0));
return 0;
}
上面的代码打印值0
虽然下面的代码打印值1
#include <stdio.h>
#include <math.h>
int main() {
int a = pow(3546, 0);
printf("%d\n", a);
return 0;
}
为什么会这样?尽管它们是等价的。
解决方案
没有等价的。后一个函数将数字显式转换为int
打印前,而前者通过尝试使用错误的格式说明符打印浮点数导致 UB——你很幸运得到0
,你可能得到了一个任意数字。
请打开编译器上的所有警告,它应该抱怨对错误类型的数据使用错误的格式。
推荐阅读
- amazon-web-services - 摄取大量数据时 AWS 的 Solr 崩溃
- vba - 如何使用打开对话框从文件夹中导入批量图片以选择整个文件夹并为每张图片制作新幻灯片
- c - 我的令牌功能出现意外行为
- boost - 将 boost cpp_int 转换为双倍的推荐方法?
- loops - VueJs v-for 在数组中循环数组
- jdbc - 使用 Hikari CP 的 db2 数据库的 db2jcc4 驱动程序的套接字超时属性
- javascript - 如何在 Angular 10 中调用 body onload JavaScript 函数
- windows - 交叉编译在 Windows 上构建 Linux 应用程序
- discord.py - 如何检查响应消息是否来自作者,同时忽略不和谐机器人中不是作者的其他消息
- vue.js - 重新渲染表格获取json vuejs