函数

来源:互联网 发布:win10网络图标有个红叉 编辑:程序博客网 时间:2024/04/19 19:22
 C语言程序鼓励和提倡人们把一个大问题划分成一个个小问题,对应于解决一个子问题就编制一个函数。因此,C语言程序是由大量的小函数而不是由少量的大函数构成的。即小函数构成大程序。

用户自定义的函数原型通常可以一起写在头文件中,通过头文件引用的方式来进行!

在C语言中,程序的编译是以文件为单位进行的。

struct vm_struct *_get_vm_area(unsigned long size,unsigned long flags,unsigned long start,unsigned long end){}
这个函数的类型说明符为struct vm_struct *,这是一个函数返回值类型的说明符,指明该函数返回值是一个指向vm_struct结构体的指针。在这里没有指明函数的存储类型说明,则该函数默认按extern来处理。表明其他的函数可以调用此函数。

函数调用中发生的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向的传给实参。实参和形参所占用的存储空间是完全独立的,因此,在函数调用过程中,形参的值发生了改变,而实参的值不会变化。如果确实想改变实参的话可以在函数内定义静态局部变量。这样每次调用该函数就可以引用上次调用的结果了。

函数的值只能通过return语句来返回主调函数。一般形式为:return 表达式; 或者是  return (表达式);
   
C语言中不允许作函数的嵌套定义,因此各个函数之间是平行的,不存在上一级和下一级函数的问题。但是可以在函数体内调用其他或者本身的函数。

由于Linux的内核编程模式不同于用户空间的编程模式,Linux的内核编程模式是模块编程的方法,通过加载,卸载模块的方式进行的,因此没有main函数的入口,而普通用户空间的编程都必须有main主函数,因此不可以混淆。

struct vm_struct *get_vm_area(unsigned long size,unsigned long flags)
{
    return _get_vm_area(size,flags,VMALLOC_START,VMALLOC_END);
}
这是对函数_get_vm_area()进行了封装,在Linux中有很多此类封装,通常用于处理函数参数传递的判断,出错处理等。