文章目录

  • C语言为什么有函数?
  • 函数书写的一般原则
  • 函数是动词,变量是名词
  • 函数的实质是:数据处理器
  • 函数的基本使用
  • 函数原型和作用
  • 编译器的工作流程

C语言为什么有函数?

1、整个程序分成多个文件,一个文件分成多个函数,一个函数分成多个语句。这就是整个程序的组织形式,这样组织的好处在于:分化问题,便于编写程序,便于分工。

2、函数的出现是程序员、架构师的需要,不是编译器、CPU需要。

3、函数的目的就是实现模块化编程。提高程序的可移植性。


函数书写的一般原则

1、遵循一定格式。函数的返回类型、函数名、参数列表等。

2、一个函数只做一件事。

3、参数不能太多。在ARM体系下,传参不宜超过4个。如果传参确实需要更多则考虑结构体打包。

4、尽量少些全局变量。函数最好用传参返回值来和外部交换数据。不要用全局变量。


函数是动词,变量是名词

1、函数将来被编译成可执行代码段,变量(主要是全局变量)经过编译后变成数据或者在运行事变成数据。一个程序的运行需要代码和数据两方面的结合才能完成。

2、代码和数据需要相互配合,代码是为了加工数据。


函数的实质是:数据处理器

1、程序的主体是数据,也就是说程序运行的主要目标是生成目标数据。写代码也是为了目标数据。如何得到目标数据?必须要两个因数,原材料+加工算法,原材料就是程序的输入数据,加工算法就是程序。

2、程序的编写和运行就是为了把原数据加工成目标数据,所以函数的实质就是一个数据处理器

3、函数就是程序的一个缩影,函数的参数列表其实就是为了给函数输入原材料数据,函数的返回值和输出型参数就是为了向外部输出目标数据,函数的函数体里的代码就是加工算法。

4、整个程序的运行其实就是很多个函数相继运行的连续过程。


函数的基本使用

函数三要素: 定义、声明、使用
函数定义就是函数体、函数声明是函数原型、函数调用就是使用函数。
函数定义是 函数的根本,函数定义中的函数名表示了这个函数在内存中的首地址,所以可以用函数名来调用执行这个函数(实质是指针解引用访问):函数定义中的函数体是函数执行关键,函数将来执行时主要就是执行函数体。所以一个函数没有定义就是无稽之谈。
函数声明主要作用是告诉编译器函数的原型。
函数调用就是 调用执行一个函数。


函数原型和作用

1、函数原型就是 函数的声明(函数的函数名、返回值类型、参数列表)
2、函数原型的作用: 给编译器提供原型,让编译器在编译程序时进行参数的静态类型检查
编译器在编译程序时是以单个源文件为单位的。在哪里调用就要在哪里声明,而且编译器工作时已经经过预处理(宏定义全部替换了;#include 头文件全部展开了)了。编译器在编译文件时是按照文件内容先后顺序执行的。


编译器的工作流程

编译器从源文件的第一行开始编译,遇到函数声明时就会收到编译器的函数声明表中,然后继续向后。当遇到一个函数调用时,就在本文件的函数声明表中查这个函数,看有没有原型对应的一个函数。如果没有或者只有部分匹配就会报错或警告;如果发现多个则会报错或报警告。(函数可以重复声明但是不能重复定义)

C语言基础篇 (二十五) 详解C语言第一大功臣:函数相关推荐

  1. LINUX学习基础篇(十五)软件包管理

    LINUX学习基础篇(十五)软件包管理 软件包管理 软件包分类 源码包 二进制包 选择 依赖性 rpm包安装 rpm包命名规则 rpm包安装和卸载 服务命令 rpm查询命令 验证 数字证书 rpm中文 ...

  2. 鸟哥的Linux私房菜(基础篇)- 第十五章、磁碟配额(Quota)与进阶文件系统管理

    第十五章.磁碟配额(Quota)与进阶文件系统管理 最近升级日期:2009/09/10 如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁碟配额 (Quo ...

  3. python进阶记录之基础篇二十六_Python进阶记录之基础篇(十六)

    回顾 在Python进阶记录之基础篇(十五)中,我们介绍了面向对象的基本概念以及Python中类和对象的基础知识,需要重点掌握类的创建和对象的使用.今天我们继续讲一下Python中面向对象的相关知识点 ...

  4. 鸟哥的Linux私房菜(基础篇)- 第二十五章、 Linux 备份策略

    第二十五章. Linux备份策略 最近升级日期:2009/09/18 万一不幸你的 Linux 被黑客入侵了.或是你的 Linux 系统由於硬件关系 (不论是天灾还是人祸) 而挂掉了!这个时候,请问如 ...

  5. Python基础篇(十五)-- Pygame游戏编程

    1 初识Pygame Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像.声音.视频.事件.碰撞等的支持.Pygame建立在SDL的基础上,SDL是一套跨 ...

  6. Python遥感图像处理应用篇(二十五):Python+GDAL 波段组合

    1.使用场景描述 之前使用arcpy python2.7写了一篇进行遥感数据波段组合计算的博文,使用场景是将所有单波段数据放在一个文件夹中(如下图),文件名称前缀一样,后缀波段编号用来区分不同的波段, ...

  7. Python小白到老司机,快跟我上车!基础篇(二十)

    1.multiprocess模块详解 Python的os模块封装了常见的系统调用,其中就包含 「fork函数」,通过这个函数可以轻松的创建子进程,但是要注意一点,在Windows系统上是无法使用for ...

  8. C语言基础知识入门(大全详解)

    一.C语言基础知识入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是 ...

  9. Linux平台Makefile文件的编写基础篇和GCC参数详解

    问:gcc中的-I.是什么意思....看到了有的是gcc -I. -I/usr/xxxxx..那个-I.是什么意思呢 最佳答案 答:-Ixxx 的意思是除了默认的头文件搜索路径(比如/usr/incl ...

  10. java 字节码详解_Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

最新文章

  1. Linux 的文件权限与目录配置
  2. 20201021 《计算感知》第3节课 笔记
  3. Android中dp与px互转的方法
  4. android int 首位值_Android应用视图的管理者Window
  5. Ubuntu 13.10/12.10/12.04 用户如何升级到 Ubuntu 14.04
  6. 携程:2021国庆高星酒店均价945元 环比节前一周提升超80%
  7. 面试准备每日五题:C++(一)——变量定义声明、#ifdef #else、结构体赋值、sizeof strlen、C和C++的static
  8. 计算机系统的组成doc,简述计算机系统的组成.doc
  9. 三千万海外用户的天才程序员之死
  10. linux根据部署jenkins
  11. java滥用接口_接口滥用问题
  12. Trapcode Particular 5 - Particle
  13. 2022年电工(初级)考试模拟100题及答案
  14. openproject_OpenProject入门
  15. 克里希纳驼奶粉食疗可养生?
  16. HarmonyOS助力构建“食用菌智慧农场”
  17. 超分辨论文阅读笔记:Non-local
  18. 子节点含有表单元素的div元素的blur事件
  19. 一步一步教你VMWare安装苹果Mac OS X
  20. php修改excel表格数据,php修改excel表格数据-php怎么导入Excel表格到数据库,根据表格内的字段......

热门文章

  1. 微信小程序 按钮字体设置
  2. 计算机编程专业文,浅谈高职专业之计算机编程类课程改革
  3. POJ 2785: 4 Values Whose Sum is 0
  4. 学习The Missing Semester of Your CS Education (第一课)
  5. PC端调用摄像头并拍照
  6. vscode是付费的吗_对vs code已爱不释手
  7. TCRT5000-ESP32-micropython-实验-error:rst:0x10 (RTCWDT_RTC_RESET),boot:0x13(SPI_FAST_FLASH_BOOT)
  8. 基于pytorch框架用resnet101加GPT搭建AI玩王者荣耀
  9. python3 zipfile_Python之zipfile模块的使用
  10. 关系的完整性-实体完整性