--说说函数:
函数这两个字相信大家都不会陌生,尤其对于学习理科工科的同学们,函数更是那最不可触及的痛。英文单词为: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语言开讲啦(一)里专门推荐了基本比较好的书),其实主要是多写程序多读程序(写的同时自然就读了),多多的借鉴精品程序(说白了也就是抄和改别人写好无误的程序,并保证你抄改完后还能正常使用)(其实我觉得这个写程序拷贝别人的参考别人的也不丢人,高考作文大家还借鉴呢是吧,再说谁就敢说我的程序都是自己写的呢。千古文章一大抄。)