上一页 下一页

C 编程基础

函数:函数原型

现在,在程序中为所有函数使用函数原型被认为是良好的编程习惯。函数原型在函数实际声明之前,向程序的其他部分声明函数名、其参数及其返回类型。为了理解函数原型为何有用,请输入以下代码并运行它

#include <stdio.h>

void main()
{
    printf("%d\n",add(3));
}

int add(int i, int j)
{
    return i+j;
}

即使 add 函数期望两个参数却只接收一个,这段代码在许多编译器上也能编译通过而不会给出警告。这是因为许多 C 编译器不检查参数的类型或数量是否匹配。你可能会因为不小心多传或少传了一个参数而浪费大量时间调试代码。上述代码编译正确,但会产生错误的结果。

广告

为了解决这个问题,C 语言允许你在程序的开头(实际上,程序的任何地方)放置函数原型。如果你这样做,C 语言会检查所有参数列表的类型和数量。尝试编译以下代码

#include <stdio.h>

int add (int,int); /* function prototype for add */

void main()
{
    printf("%d\n",add(3));
}

int add(int i, int j)
{
    return i+j;
}

函数原型会使编译器在 printf 语句上标记一个错误。

在程序的开头为每个函数放置一个函数原型。它们可以为你节省大量的调试时间,并且还能解决你在使用未声明函数时遇到的编译问题。例如,以下代码将无法编译

#include <stdio.h>

void main()
{
    printf("%d\n",add(3));
}

float add(int i, int j)
{
    return i+j;
}

你可能会问,为什么当 add 返回 int 类型时它可以编译,而返回 float 类型时却不行?这是因为旧版 C 编译器默认返回 int 类型。使用函数原型将解决这个问题。“旧式”(非 ANSI)编译器允许使用函数原型,但原型中的参数列表必须为空。旧式编译器不对参数列表进行错误检查。