我用来学习C的书解释了一些名为" prototypes"这是我无法理解的。在本书中,以下示例代码解释了这些"原型"。这意味着什么?什么是"原型"?
//* two_func.c -- a program using two functions in one file */
#include <stdio.h>
void butler(void);
int main(void)
{
printf("I will summon the butler function.\n");
butler();
printf("Yes! bring me some tea and writable DVD's.\n");
getchar();
return 0;
}
void butler(void) /*start of function definition*/
{
printf("You rang,sir.\n");
}
请用简单的语言解释。
答案 0 :(得分:3)
函数原型(也称为“前向声明”)声明函数而不立即提供“正文”。除了函数本身之外,您还要编写原型,以便告诉编译器您在其他地方定义的函数:
您的原型void butler(void);
执行以下所有操作:
butler
存在,butler
没有参数,butler
不返回任何内容。原型非常有用,因为它们可以帮助您隐藏函数的实现细节。您将原型放在库的头文件中,并将实现放在C文件中。这使得依赖于库的代码可以与代码分开编译 - 这非常重要。
答案 1 :(得分:0)
这是原型:
void butler(void);
基本上它将butler
定义为不带参数且没有返回值的函数。它允许编译器继续向前,即使尚未真正定义butler
函数。请注意,原型不包含任何实际代码。它只是从外部定义管家功能的样子。实际代码可以稍后出现在文件中。
如果你的代码是
#include <stdio.h>
int main(void) {
butler(); // note this line
}
void butler() { return; }
编译器会在note this line
部分停止,抱怨butler()
不存在。它不会首先扫描整个文件的函数,它只是停在它遇到的第一个未定义的函数调用上。
答案 2 :(得分:0)
Prototype包含函数的返回类型,名称以及传递它的不同类型参数的顺序。
如果在调用函数之前编写函数定义,则不需要原型。但是,正如您的示例中的情况一样,函数butler()
在其定义之前被调用,因此,需要一个原型来告诉编译器存在这样的函数,它将具有返回类型和参数。
否则,在调用函数后写入函数定义将导致错误。
答案 3 :(得分:0)
在这种情况下, prototype 是一个更通用的术语,用于C中称为函数声明的内容,即:
void butler(void);
您可能还会发现它名为功能签名。这两个术语实际上更多地指的是从概念的角度定义butler()
的方式,作为一个不接受任何参数而不返回值的函数,而不是它的声明足够的事实。您可以在源代码中使用它。
答案 4 :(得分:0)
void butler(void);
被称为原型或功能声明。
以下是功能定义。
void butler(void) /*function definition */
{
printf("You rang,sir.\n");
}