当我没有声明一个函数原型并且只有一个函数时,它会运行。但是,当我有多个函数时,它会给出错误:
重新声明“function-name”
时类型不匹配
#include <conio.h>
#include <stdio.h>
float area1(float, float);
float area (float, float);
void main()
{
float x;
float y;
float a;
float z;
clrscr();
x = 5.0;
y = 5.0;
z = area(x, y);
a = area1(x, y);
printf("%f", z);
printf("%f", a);
getch();
}
void area(float a, float b)
{
int c;
c = 0.5 * a * b;
return c;
}
void area1(float a, float b)
{
int c;
c = 0.5 * a * b;
return c;
}
答案 0 :(得分:3)
您通常希望在使用前对函数进行原型设计。功能的数量是无关紧要的,但顺序很重要。有两种典型的做事方式:
答案 1 :(得分:2)
涉及几个不同的规则,但总的来说:
如果编译器在第一次调用函数之前看到原型 - 它知道该怎么做。
如果编译器在第一次调用之前看到函数本身 - 它知道该怎么做。
如果前两个都不成立,编译器会根据您调用函数的方式发明原型。如果后续调用与“发明的”原型不匹配 - 您会收到引用的错误。如果您的编译器是严格的,那么您也可能会收到错误,而不是隐式原型。
我应该参考哪本书
我建议从K&R开始。还有许多其他(以及更新的)书籍,但是在我处理C语言时,K&amp; R是第一个拥有这本书的书籍。
答案 2 :(得分:2)
你应该以基本相反的顺序编写函数,在文件开头使用最低级函数,然后使用更高级函数(使用低级函数)。并使用前面的单独原型(通常在标题中)函数的实现。
答案 3 :(得分:1)
我没有在任何地方看到这一点,所以我想我会这样做:你的原型声明了area和area1函数作为返回浮点数并获取2个浮点参数但是你将它们实现为返回空洞并且你有一个return语句在他们里面,这几乎应该让编译器对你大喊大叫。
其次你试图给一个int变量一个浮点值,这是一个非常未定义的行为,所以虽然编译器可以让它通过,但它也不是你想要的。因此,作为更聪明的人建议,拿起一本好的C书。