首页 > 解决方案 > 函数返回更改为直接写在 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;
}

为什么会这样?尽管它们是等价的。

标签: cfunctionprintfpow

解决方案


没有等价的。后一个函数将数字显式转换为int打印前,而前者通过尝试使用错误的格式说明符打印浮点数导致 UB——你很幸运得到0,你可能得到了一个任意数字。

请打开编译器上的所有警告,它应该抱怨对错误类型的数据使用错误的格式。


推荐阅读