
1.5 C程序的基本单位——函数
C程序是由函数构成的,这一点也是C语言和其他高级语言的区别。一般的高级语言都有主程序、子程序、函数等结构,而C语言的基本单位就是函数。
C语言有主函数、库函数以及自定义函数(子函数)等。
main是C语言的主函数,一个C程序至少要包含main这个主函数,其他函数可以有也可以没有,一个单独的main函数即可构成一个C程序。
例如:


这就算是一个C程序。
注意
一个程序中main函数只能出现一次,但出现的位置不限。
在C程序中可以使用系统提供的库函数,例如:

C语言的库函数并不是C语言本身的一部分,它是由编译程序根据一般用户的需要,编制并提供用户使用的一组程序。可分为两类,一类是C语言标准规定的库函数,比如输入函数scanf、输出函数printf。另一类是编译器提供的特定的库函数,比如sin、cos等函数。由于版权原因,库函数的源代码一般是不可见的,但在头文件中可以看到它对外的接口。C语言的库函数极大地方便了用户,同时也补充了C语言本身的不足。在编写C语言程序时使用库函数,既可以提高程序的运行效率,又可以提高编程的质量。
在上面这个程序中使用了库函数printf,它的作用是将变量i的值打印出来。C语言没有输入/输出语句,printf就相当于输出语句,它会在屏幕上输出显示运算的结果:i=20。
在C程序中也可以根据需要自行编制自定义函数。C程序就是由函数构成的,除了main主函数,其他函数都可以由用户自行扩展编制。
比如编写一个自定义函数:

这个自定义函数可以在main函数中被调用执行。例如:

在C语言中,函数是程序的基本单位。
一个C程序总是从main函数开始,并在main函数中结束的。main函数能够调用其他函数,而其他函数则不能调用main函数。
函数在被定义时是分别定义的,是互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义。所有函数都是平行的、独立的。不能在一个函数中定义另外一个函数,但却能够调用另外一个函数。不过main函数不能被别的函数调用。
main函数可以放置在程序的任何位置。它可以在程序的最前面,可以在程序的最后面,也可以在程序中间的某个地方。
自定义函数的函数名可以由我们自行命名,但main这个函数名是固定的,不能更改。main后面的圆括号也是不能少的,里面可以有参数,也可以没有参数。
C语言规定函数的格式是:
(1)函数的说明部分,包括函数名、函数类型、形式参数名称和形式参数的类型。
(2)函数体,包含在一对最外层的花括号“{}”之间的部分,包括函数内部变量说明部分和函数执行代码部分。变量说明部分可以有,也可以没有。函数代码部分可以有一个语句或多个语句,当然也可以没有语句。
新的C语言标准规定函数体最后一句必须为“return(返回值或变量名)”。
函数格式的具体形式一般为:

例如:

这也是一个函数,但它什么也没干。