函数的基本知识

函数定义中的各构成部分都可以省略。最简单的函数如下所示:

1
dummy () {}

如果函数省略了返回值类型,默认是 int 类型。

被调用函数通过 return 语句向调用者返回值, return 语句的后面可以跟任何表达式:

return 表达式;

在必要时,表达式会被转换成函数的返回值类型。

return 后面也不一定跟着表达式,当 return 后面什么都没有的时候,函数讲不返回值。

返回非整型值的函数

如果想要返回非整型值的函数在函数定义的时候,在函数名称之前写上需要返回的类型即可:

1
2
3
double atof(char s[]) {
...
}

如果想要使用返回值是非整型的函数,需要让调用的函数知道该函数的返回值上非整型值,这一点很重要。一种方法是在调用函数中显示声明 atof 函数。

1
2
3
4
main() {
double sum , atof(char []);
...
}

其中 sum 上一个 double 类型的变量,atof 函数带有一个 char[] 类型的参数,并且返回一个 double 类型的值。

外部变量

外部变量可以在全局范围内访问,任何函数都可以通过名字访问一个外部变量。

作用域规则

名字的作用域指的是程序中可以使用该名字的部分。对于在函数开头声明的自动变量来 说,其作用域是声明该变量名的函数。

外部变量或函数的作用域从声明它的地方开始,到其所在的(待编译的)文件的末尾结束。

1
2
3
4
5
main() { ... }
int sp = 0;
double val[MAXVAL];
void push(double f) { ... }
double pop(void) { ... }

在 push 与 pop 这两个函数中不需进行任何声明就可以通过名字访问变量 sp 与 val,但是,这两个变量名不能用在 main 函数中,push 与 pop 函数也不能用在 main 函数中。

如果要在外部变量的定义之前使用该变量,或者外部变量的定义与变量的使用不在同一个源文件中,则必须在相应的变量声明中强制性地使用关键字 extern。

【参考资料】

  1. C程序设计语言

—EOF—