找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1762|回复: 0
打印 上一主题 下一主题
收起左侧

C语言教程(5)-函数

[复制链接]
跳转到指定楼层
楼主
ID:99082 发表于 2015-12-10 03:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
--说说函数:


函数这两个字相信大家都不会陌生,尤其对于学习理科工科的同学们,函数更是那最不可触及的痛。英文单词为:function,所以我们学的数学中的函数关系一般用F(x)表示吧(我个人推测的,因为没人跟我说过这个貌似无聊的事,不过为什么翻译成函数呢,真是)。

函数的功能是什么啊?大家学数学时(无论是高中的代数还是大学的微积分)都主要是跟函数打交道,此处刨除定义域值域啊之类不谈,函数的功能可以简单的说成输入一个数就会有一个唯一的确定的值输出

数学中的函数:

F(x)=2x+1

C语言里同样需要函数,而且函数在C语言中扮演这重要的角色。C语言中函数是用于完成特定任务的程序代码的自包含单元。

C语言中的函数:

int main (void)

{

函数体;

}

为什么C语言要使用函数呢?

第一、使用函数主要是为了调用,在每次使用时调用函数,就不用一遍又一遍的重新编写代码。函数可以在任何需要的地方调用,并且同一个函数可以在不同的程序中调用。

第二、使用函数使程序更加模块化,即使某种功能在程序中只是使用一次,将其以函数的形式实现也是有好处的,程序的模块化使得程序的阅读、修改、移植都更加方便。


--函数结构:


拿一个在单片机程序中最常用的函数--延迟函数为大家举例。

一个完整的C函数可以说是由函数头和函数体组成的。

#include “stdio.h”

该句的作用相当于你在文件中该行所在的位置键入了文件stdio.h(stdio.h是所以C语言编译包的一个标准部分,这个文件对关键字的输入和显示输出提供支持)的完整内容。实际上,它是一种复制和粘贴的操作,这样可以方便的在多个程序间共享共用的信息。

我在上边声明了一个函数如下:

void Delay(uint8_t count)

void是修饰返回值

Delay是函数名

uint8_t是修饰参数

count是参数名

C程序中包含一个或多个函数,它们是C程序的基本模块。上面声明了一个这样的函数(大家给解释这个函数的结果,顺路和大家一起写个我们想写的新的函数):函数名叫作Delay(英文单词delay就是延迟的意思,这个是可以根据你使用的需求自己决定的,比如我就想写成Yanchi,拼音更好记),这个函数接受参数叫count(英文单词count是计数的意思,这个参数的名字你也可以自己决定,比如我就想写成a,count我记不住)且根据参数名前边的uint8_t可知道此参数为8位无符号整数型(范围为0--255的整数,额,这个例子举的其实有点小了,真正使用时建议使用32位的 那我就改成uint32_t)。而前边的void修饰的是返回值,void的英文意思是空,什么都没有,就是不返回任何数。我就想要个返回值,返回个0告诉我延迟已经解释了。

那么我就可以申明这样一个函数

int Yanchi(uint32_t a)

而函数体就是大家想让函数执行的语句,就要靠大家按照自己的想法编写了。

许多程序员喜欢把函数看成是“黑盒子”,即对应一定的输入会产生特定的结果和返回某个数值,而黑盒子内部的行为并不需要考虑,这种想法在以后编写复杂的程序时是很实用的,如STM32基于库文件编写程序时大量调用库函数还有移植嵌入式操作系统时也会调用大量函数。


--C标准库函数:


ANSIC C标准要求符合该标准的C语言实现必须支持由其定义的标准库函数。C语言本身的关键字只是定义了最基本的语言控制功能,其他的所以功能都是由函数实现。我们可以说C语言是一种基于函数的高级语言,而这其中标准库函数实现了一些最基础基本的底层操作和常用工具。

输入与输出:stdio.h

头文件stdio.h中定义了输出和输入函数、类型以及宏。用于处理和文件有关的操作、为printf函数提供格式化输出转换。

字符串函数:string.h

头文件string.h定义了两组字符串函数。

数学函数:math.h

头文件math.h包含了一些数学函数和宏。

断言:assert.h

assert宏用于为程序增加诊断功能。


有大一学弟们反映说这个每周文章里边说的C语言知识和学校发的教材不同步,我倒是没核实因为我手头上没有学校的教材,当年是学过但早忘了都讲啥了。只想说不同步很正常的,教材里的内容还是比较有限的,咱们课堂好像后几章也没讲,大家可以自己找几本书(我前边C语言开讲啦(一)里专门推荐了基本比较好的书),其实主要是多写程序多读程序(写的同时自然就读了),多多的借鉴精品程序(说白了也就是抄和改别人写好无误的程序,并保证你抄改完后还能正常使用)(其实我觉得这个写程序拷贝别人的参考别人的也不丢人,高考作文大家还借鉴呢是吧,再说谁就敢说我的程序都是自己写的呢。千古文章一大抄。)在实际中遇到解决不了的问题,就翻书找找知识点。如果一段时间积累了不少问题了,那就静下心来前期后后的好好学学这部分的知识。
以下是本系列教程文章列表:欢迎大家踊跃讨论,有问题可在51黑论坛回帖提出.


C语言基础教程(1):http://www.51hei.com/bbs/dpj-41177-1.html
C语言教程(2)-关键字 变量:http://www.51hei.com/bbs/dpj-41178-1.html
C语言教程(3)-控制语句:http://www.51hei.com/bbs/dpj-41179-1.html
C语言教程(4)-运算符:http://www.51hei.com/bbs/dpj-41180-1.html
C语言教程(5)-函数:http://www.51hei.com/bbs/dpj-41181-1.html
C语言教程(6)-数组与函数指针:http://www.51hei.com/bbs/dpj-41182-1.html

51单片机教程:http://www.51hei.com/bbs/mcu-xuexi-1.html
STM32教程:http://www.51hei.com/bbs/dpj-41167-1.html

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表