上一页 下一页

C 编程基础

函数

大多数语言都允许你创建某种函数。函数允许你将一个冗长的程序分解为命名的部分,以便这些部分可以在整个程序中重复使用。函数接受参数返回结果。C 语言函数可以接受无限数量的参数。通常,C 语言不关心你在程序中放置函数的顺序,只要函数名在调用之前为编译器所知即可。

我们之前已经稍微谈过函数了。之前看到的 rand 函数是函数中最简单的了。它不接受任何参数,并返回一个整数结果

广告

int rand()
/* from K&R
   - produces a random number between 0 and 32767.*/
{
    rand_seed = rand_seed * 1103515245 +12345;
    return (unsigned int)(rand_seed / 65536) % 32768;
}

int rand() 这行代码向程序的其余部分声明了 rand 函数,并指定 rand 不接受任何参数并返回一个整数结果。这个函数没有局部变量,但如果需要局部变量,它们会放在开头的 { 后面(C 语言允许你在任何 { 之后声明变量——它们存在直到程序到达匹配的 },然后就会消失。因此,函数的局部变量在函数中到达匹配的 } 时就会立即消失。当它们存在时,局部变量存在于系统堆栈上)。请注意,第一行的 () 后面没有 ;。如果你不小心加上一个,你会从编译器那里收到大量毫无意义的错误消息。另请注意,即使没有参数,你也必须使用 ()。它们告诉编译器你正在声明一个函数,而不是简单地声明一个 int 变量。

return 语句对于任何返回结果的函数都很重要。它指定函数将返回的值,并使函数立即退出。这意味着你可以在函数中放置多个 return 语句,以提供多个退出点。如果你没有在函数中放置 return 语句,函数将在到达 } 时返回一个随机值(如果你没有返回一个特定值,许多编译器会警告你)。在 C 语言中,函数可以返回任何类型的值:int、float、char、struct 等。

有几种正确调用 rand 函数的方法。例如:x=rand();。在这个语句中,变量 x 被赋予 rand 返回的值。请注意,即使没有传递参数,你也必须在函数调用中使用 ()。否则,x 会被赋予 rand 函数的内存地址,这通常不是你想要的结果。

你也可以这样调用 rand

if (rand() > 100)

或者这样

rand();

在后一种情况下,函数被调用了,但 rand 返回的值被丢弃了。你可能永远不想对 rand 做这种操作,但许多函数通过函数名返回某种错误代码,如果你不关心错误代码(例如,因为你知道错误是不可能发生的),你可以用这种方式丢弃它。

如果你不打算返回任何值,函数可以使用 void 返回类型。例如

void print_header()
{
    printf("Program Number 1\n");
    printf("by Marshall Brain\n");
    printf("Version 1.0, released 12/26/91\n");
}

这个函数不返回任何值。你可以用以下语句调用它

print_header();

你必须在调用中包含 ()。如果你不包含,函数将不会被调用,即使它在许多系统上会正确编译。

C 语言函数可以接受任何类型的参数。例如

int fact(int i)
{
    int j,k;

    j=1;
    for (k=2; k<=i; k++)
        j=j*k;
    return j;
}

返回 i 的阶乘,i 作为整数参数传入。用逗号分隔多个参数

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

C 语言多年来一直在发展。你有时会看到像 add 这样的函数以“旧式”编写,如下所示

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

能够阅读旧式编写的代码很重要。它们的执行方式没有区别;这只是一种不同的表示法。你应该使用“新式”(称为 ANSI C),其中类型作为参数列表的一部分声明,除非你知道你将把代码提供给只能访问“旧式”(非 ANSI)编译器的用户。