是否有必要在C中声明原型?

时间:2012-01-25 04:34:51

标签: c function

当我没有声明一个函数原型并且只有一个函数时,它会运行。但是,当我有多个函数时,它会给出错误:

  

重新声明“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;
}

4 个答案:

答案 0 :(得分:3)

您通常希望在使用前对函数进行原型设计。功能的数量是无关紧要的,但顺序很重要。有两种典型的做事方式:

  1. 以基本相反的顺序编写函数,文件开头的最低级函数,以及更高级函数(使用低级函数)。
  2. 在函数实现之前使用单独的原型(通常在标题中)。

答案 1 :(得分:2)

涉及几个不同的规则,但总的来说:

  1. 如果编译器在第一次调用函数之前看到原型 - 它知道该怎么做。

  2. 如果编译器在第一次调用之前看到函数本身 - 它知道该怎么做。

  3. 如果前两个都不成立,编译器会根据您调用函数的方式发明原型。如果后续调用与“发明的”原型不匹配 - 您会收到引用的错误。如果您的编译器是严格的,那么您也可能会收到错误,而不是隐式原型。

  4.   

    我应该参考哪本书

    我建议从K&R开始。还有许多其他(以及更新的)书籍,但是在我处理C语言时,K&amp; R是第一个拥有这本书的书籍。

答案 2 :(得分:2)

你应该以基本相反的顺序编写函数,在文件开头使用最低级函数,然后使用更高级函数(使用低级函数)。并使用前面的单独原型(通常在标题中)函数的实现。

答案 3 :(得分:1)

我没有在任何地方看到这一点,所以我想我会这样做:你的原型声明了area和area1函数作为返回浮点数并获取2个浮点参数但是你将它们实现为返回空洞并且你有一个return语句在他们里面,这几乎应该让编译器对你大喊大叫。

其次你试图给一个int变量一个浮点值,这是一个非常未定义的行为,所以虽然编译器可以让它通过,但它也不是你想要的。因此,作为更聪明的人建议,拿起一本好的C书。