概念

函数可以被看作是一个由用户定义的一系列操作的集合。一般来说,函数用一个名字来表示。函数的操作数,称为参数,由一个位于括号中,并且用逗号分隔的参数列表指定,如果该函数没有参数需要传入,则这个列表为空,或者仅有关键字void;函数的结果被称为返回值,返回值的类型被称为函数返回类型,不产生返回值的函数,返回类型是void,意思是什么都不返回;函数执行的动作在函数体中指定,函数体包含在一对花括号中。函数返回类型、以及其后的函数名、参数列表和函数体构成了函数定义:

返回值类型 函数名(参数列表)

{

函数体

}

用户自定义函数

如下,函数的名字是sum,返回值类型是int,有两个参数分别是int型的a和int型的b。

函数声明由函数返回类型、函数名、参数列表构成,由";"结尾,这三个元素被称为函数声明或函数原型。函数原型描述的是函数的接口,它详细描述了调用函数时需要提供的参数的类型和个数,以及函数返回值的类型。一个函数可在一个文件中被声明多次,一个函数通常需要先声明,然后才能被调用。例如上面的sum函数声明如下:

int sum(int a, int b);

库函数

库函数就是把一些常用的函数放到库里,供别人使用的一种方式。调用的时候把它所在的文件名用#include<>加到里面就可以了。库函数一般是放到lib文件里的。库函数的源代码一般是不可见的,但在头文件中(xxx.h)你可以看到它对外的接口。下面就是调用lib里面的库函数printf打印内容到终端的实例,因为库函数printf再头文件stdio.h中声明,所以需要使用#include来引用,在添加引用后,编译器才能在调用这个函数的时候找到它。

函数调用

函数调用通常需要先声明,然后再调用。库函数的调用,直接包含它所在的头文件即可#include 。如果是我们自己定义的函数,如果再文件内调用,则只需在调用之前声明这个函数即可;如果是在文件外调用,我们通常将这个函数声明写在一个头文件中,例如xxx.h中,然后在调用的地方通过#include "xxx.h"即可调用。

回调函数

举个例子,酒店提供叫醒服务,但是要求客人自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇凉水等等。这里,“叫醒”这个服务是酒店提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉酒店的,也就是回调函数。而旅客告诉酒店怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为注册(register)回调函数,也就是说回调函数注册后不会里面调用,而是等到需要调用的时候再回来调用。

如上面我的的回调函数的例子,其中register_service就是用来注册回调函数的,注册的目的就是现在不调用,但是在需要回调的时候,我可以找到这个函数。上面的service_zhangSan、service_liSi就是回调函数,所以看来回调函数和普通的函数并没有区别,只不过是使用的场景不同。

不定参函数

我们平时常用的函数参数个数都是固定的,但是有时候也会用到一些参数不固定的函数,例如printf等一系列函数,这些函数的参数的个数是不确定的。下面我写个简单的例子来阐述下不定参函数的实现:

以上是老韩关于Linux c函数的总结欢迎一起讨论,如有不足欢迎指点;对Linux c或者Linux驱动感兴趣的朋友可以收藏关注,我会持续更新的,谢谢支持!

回调函数例子_Linux C - C基础篇八(函数)相关推荐

  1. 函数闭包--JavaScript权威指南--基础篇4

    函数JavaScript权威指南–基础篇4 一.知识点–函数–闭包 1.要理解函数闭包,要先知道几个概念: ①块级作用域和函数作用域的概念 FAQ:什么是块级作用域? 在类C语言中是这么定义的:变量的 ...

  2. Python基础篇:函数的深入简出

    大家好,我是辣条哥~ 几天没有更新了,废话不多说直接上高速~ 另外有别的需求啥的可以在底下留言,我会争取赶上进度更新的~ 目录 函数和模块 函数的作用 定义函数 参数的默认值 可变参数 用模块管理函数 ...

  3. C语言标量变向量的函数,GLSL 详解(基础篇)

    上节在绘制三角形的时候,简单讲解了一些着色器,GLSL 的相关概念,可能看的云里雾里的.不要担心,在本节中,我将详细讲解着色语言 GL Shader Language(GLSL)的一些基本的概念. P ...

  4. (四)nodejs循序渐进-函数,类和对象(基础篇)

    上一篇文章讲到了基本数据类型和运算符,相信大家都能做简单的运算,本篇文章将讲述函数,类,对象. 函数 在nodejs中,一个函数可以作为另一个函数的参数.我们可以先定义一个函数,然后传递,也可以在传递 ...

  5. python怎么进行同或函数_Python面试宝典之基础篇-03

    题目011:Python中为什么没有函数重载?点评:C++.Java.C#等诸多编程语言都支持函数重载,所谓函数重载指的是在同一个作用域中有多个同名函数,它们拥有不同的参数列表(参数个数不同或参数类型 ...

  6. python函数五要素_python之基础篇(二)

    防伪码:忘情公子著 一.面向过程与面向对象 面向过程: 以指令为中心,由指令去处理数据 只要考虑如何组织代码去解决问题 面向对象: 以数据为中心,所有的处理代码都围绕数据展开 要考虑如何设计数据结构组 ...

  7. JS 基础篇(七) 函数柯理化

    函数柯理化 定义 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成 接受一个单一参数(最初函数的第一个参数)的函数, 并且返回接受余下的参数且返回结果的新函数的技术 个人理解: ...

  8. c# 扩展方法奇思妙用基础篇八:Distinct 扩展(转载)

    转载地址:http://www.cnblogs.com/ldp615/archive/2011/08/01/distinct-entension.html 刚看了篇文章 <Linq的Distin ...

  9. python函数作用域与闭包_python基础-08-内置函数、作用域、闭包、递归

    python基础-内置函数.作用域.闭包.递归 1.常见的内置函数 常见的内置函数: 查看内置函数: print(dir(__builtins__)) 常见函数 type() 数据类型 print() ...

最新文章

  1. 趣味图形之 余弦函数cos与直线相交(另一种相交)
  2. SQLServer 2008 :error 40 出现连接错误
  3. Java并发编程—为什么wait/notify操作要先获取到锁?
  4. Lintcode165 Merge Two Sorted Lists solution 题解
  5. java requestbody map_@RequestBody 的正确使用办法
  6. 成也炒作,败也炒作?孙宇晨遭遇最大信任危机
  7. 95-872-064-源码-CEP-CepOperator源码
  8. 机器学习-吴恩达-笔记-6-应用机器学习的建议
  9. EasyNVR摄像机无插件直播流媒体服务器前端构建之输入框样式的调整
  10. 回复 Timer008 的一个类型转换的问题 - 不是很典型, 对其他人参考价值不大
  11. C#使用Aforge对uvc协议摄像头亮度属性的更改
  12. Raid5数据恢复算法原理- raid5数据恢复案例
  13. 如何批量将 PPT 转换为 jpeg、png、bmp 图片
  14. python之爬虫(十一) 实例爬取上海高级人民法院网开庭公告数据
  15. 激活工业数据价值 2020年建成国家工业互联网大数据中心
  16. 《摩根写给儿子的32封信》 03 企业家的资质
  17. 谣言检测论文精读——11.PAKDD2020-SAFE: Similarity-Aware Multi-Modal Fake News Detection
  18. 使用高德地图根据坐标点画出路线
  19. 自然数学-微积分的基本公式
  20. 字库芯片介绍与使用(附STM32程序~~~)

热门文章

  1. PHP spl_autoload_register()函数使用
  2. Build tool
  3. 前台传到后台类型数组对象
  4. Spotlight on MySQL
  5. 1.Weblogic通Eclipse调试配置(Weblogic同Eclipse调试配置技术)
  6. [转]MIPS 下非对齐访问的问题
  7. MySQL性能调优与架构设计——第11章 常用存储引擎优化
  8. 黑马程序员_Java集合框架
  9. [CentOS]CentOS下编译CPP文件时报错[undefined reference to `__gxx_personality_v0' collect2: ld]的解决办法...
  10. BestCoder15 1002.Instruction(hdu 5083) 解题报告