我正在学习教程中的C语言。他们谈到了原型化,但对我来说,以下代码是有效的:
double aireRectangle(double largeur, double hauteur) {
return largeur * hauteur;
}
int main() {
return aireRectangle(10, 30);
}他们告诉我们,我们必须在aireRectangle后面添加一个";“,这行得通,但对我也行……我不明白为什么它对我有效。
你知道原因吗?
发布于 2018-03-13 04:29:52
让我们来了解一下在这种情况下编译是如何工作的。编译时,编译器从文件的开头(或顶部)开始编译代码。现在,在到达主程序之前的这段代码中,编译器已经知道在同一个文件中定义了一个函数aireRectangle。现在,尝试在main函数下面定义函数aireRectangle。在这种情况下,您将得到一个错误,指出未定义引用到aireRectangle。在这种情况下,当函数aireRectangle在主函数体内时,编译器不知道它是什么。但是如果您在main函数之前定义了一个函数原型,那么当编译到达main函数时,它就会知道这个文件中的某个地方定义了一个名为aireRectangle的函数。所以它不会产生任何错误。在这种情况下,您将需要一个函数原型。
还有更多的情况,比如如果你想在许多c文件中调用你的函数,在这种情况下,最好的方法是在一些头文件中定义一个函数原型,并在一些c文件中定义它的定义,然后在你想要使用(或调用)该函数的任何地方包括那个头文件。
发布于 2019-02-21 13:29:03
它适用于您,因为您首先定义函数aireRectangle,然后使用它定义和。在本例中,编译器在调用之前就已经‘知道’了函数。
如果你在使用之后定义了一个函数,那么你需要把它的原型放在上面:
int main() {
return aireRectangle(10, 30); // You are using function before defining
}
double aireRectangle(double largeur, double hauteur) { // definition is later
return largeur * hauteur;
}在上面,函数的定义是在它的使用之后。因此,在上述情况下,您需要在顶部有一个原型。这是因为编译器可能“知道”稍后会定义一个函数。
你需要在上面有一个原型:double aireRectangle(double largeur, double hauteur);
这条规则并不严格,一些编译器对这条规则很宽松。
https://stackoverflow.com/questions/49201262
复制相似问题