当函数的声明是传统风格时,为什么输出不正确?

Yat*_*gad 5 c stdout header-files object-code

我已经pow用C中传统的声明方式声明了函数。但是,函数的输出是不正确的。我不需要在此处包含 math.h,因为我正在声明该函数并且它的目标代码已经存在。这是我的代码:

#include<stdio.h>

double pow();           //traditional declaration doesnt work, why??

int main()
{
    printf("pow(2, 3) = %g", pow(2, 3));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的输出是 1,而它应该是 8。请帮助我。

Sto*_*ica 5

传统的声明不起作用,为什么?

因为没有原型,您提供的这两个整数不会转换为pow实际接受的双精度数。使用“传统”声明时,您必须煞费苦心地确保提供的参数类型与函数所期望的完全一致,否则您的程序中就会出现未定义的行为。

这是支持原型并实际使用为标准函数提供原型的标准库头文件的原因之一。