函数
大多数语言都允许你创建某种函数。函数允许你将一个冗长的程序分解为命名的部分,以便这些部分可以在整个程序中重复使用。函数接受参数并返回结果。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)编译器的用户。