有必要用C语言声明原型吗?
当我没有声明一个函数protype并且只有一个函数时,它会运行。但是,当我有多个函数时,它会给出错误: 函数名重新声明中的类型不匹配有必要用C语言声明原型吗?,c,function,C,Function,当我没有声明一个函数protype并且只有一个函数时,它会运行。但是,当我有多个函数时,它会给出错误: 函数名重新声明中的类型不匹配 涉及到几个不同的规则,但一般来说: 如果编译器在第一次调用函数之前看到原型,它知道该做什么 如果编译器在第一次调用之前看到函数本身,它知道该做什么 如果前两个都不是真的,编译器将根据调用函数的方式创建原型。如果随后的调用与发明的原型不匹配,您将得到您引用的错误。如果您的编译器是严格的,您也可能会得到一个错误,而不是隐式原型 我应该折叠哪本书 我建议从这开始。还有许
涉及到几个不同的规则,但一般来说: 如果编译器在第一次调用函数之前看到原型,它知道该做什么 如果编译器在第一次调用之前看到函数本身,它知道该做什么 如果前两个都不是真的,编译器将根据调用函数的方式创建原型。如果随后的调用与发明的原型不匹配,您将得到您引用的错误。如果您的编译器是严格的,您也可能会得到一个错误,而不是隐式原型 我应该折叠哪本书
我建议从这开始。还有许多其他的和更为最新的书籍,但我的拙见是,当您处理C时,K&R是第一本。您通常希望在使用之前先对函数进行原型化。函数的数量无关紧要,但顺序很重要。有两种典型的做事方式: 以基本相反的顺序编写函数,最低级别的函数在文件开头,使用较低级别函数的更高级别函数在后面。 通常在函数实现之前的标题中使用单独的原型。
我在任何地方都看不到有人指出这一点,所以我想我会这样做:您的原型将area和area1函数声明为返回浮点数,并使用2个浮点数参数,但您将它们实现为返回voids,并且它们内部有一个return语句,这应该会让编译器对您大喊大叫
其次,您尝试给一个int变量一个浮点值,这是一个几乎未定义的行为,因此,虽然编译器可以让它通过,但这也不是您想要的。因此,正如更聪明的人所建议的那样,选择一本好的C语言书。您应该以基本相反的顺序编写函数,最低级别的函数在文件的开头,以及使用以下较低级别函数的较高级别函数。并且通常在函数实现之前的标题中使用单独的原型。挑选一本好书。您在哪里定义了函数?如果你能发布相关代码就更好了。我刚刚调用了函数。它运行,但当我有多个函数时,它会给我错误?@Lokesh the C bible,C编程语言第二版[平装本]Brian W.Kernighan作者Dennis M.RitchieAuthor@AdrianCornish我不同意,K&R第二版是老版本,过时的书鼓吹了许多不良的风格和危险的做法。它决不应被视为正典。例如,K&R p.26中关于这个问题的相关章节描述了函数和原型,指出函数跳过其返回语句是可以的,这是错误的,会导致未定义的行为。
#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;
}