什么是"原型"在C程序?

时间:2014-05-14 17:53:33

标签: c prototype

我用来学习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");

}

请用简单的语言解释。

5 个答案:

答案 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");

}