以下代码中似乎有许多错误,我认为会产生编译错误。特别是圆形功能的支撑和不正确的原型设计。编译器认为发生了什么,为什么认为它是可以接受的?
#include <stdio.h>
#include <math.h>
double circle ();
int main(void)
{
double r;
double a;
printf("Please enter a radius value: ");
scanf("%lf", &r);
a = circle(a, r);
printf("%lf\n", a);
}
double circle(a, r)
double a, r;
{
a = M_PI*(r*r);
return a;
}
答案 0 :(得分:4)
如果您有一个函数声明而没有指定如下参数:
double circle ();
指定函数采用未指定数量的参数。所以编译器接受它。这在C中有效。如果您将原型声明为:
double circle (void); /* double takes no arguments */
您将看到编译器将发出有关它的诊断信息。
在实际的函数定义中,您使用的是旧声明,称为 K&amp; R style 。它已经过时但仍然是编译器支持它。