嵌入式——C语言:函数②
函数①的补充:extern(多文件编写一个代码时常用)
一、数组传参
(一)整型数组传递
1.两种形式
int fun(int arr[5]);
int fun(int arr[], int len);
2.注意:数组传递到函数体内部与外部操作是同一数组
(二)字符型数组传递
int fun(char str[]);
二、预处理命令
与#相关的内容
(一)宏定义
1.不带参宏
#define PI 3.14
宏名可以是小写,但是为了与变量区分一般用大写。
2.带参宏(宏函数)
#define MAX(x, y) x > y ? x : y
带参宏 | 函数 |
无参数类型、返回值、函数类型概念 | 有函数类型、返回值、并且实参类型需要转换为形参类型 |
只是代码替换,无调用传参过程 | 有函数调用、传参过程 |
在程序编译时展开,代码体积增大 | 程序运行时加载,代码体积不增大 |
没有传参过程,代码执行效率高 | 函数有传参过程,需要调用,传参产生资源开销 |
简单代码想要封装模块使用 | 需要严谨的代码逻辑,多行代码使用 |
加括号解决以下问题
(二)头文件包含
1.#include<stdio.h>
1.1#include:包含一个文件,文件会在预处理编译时展开
1.2<>:在系统目录下查找该头文件
1.3"":先在当前目录下查找该文件,找不到再到系统目录找
2.头文件包含
2.1构造数据类型的定义
2.2全局变量的声明
2.3全局函数的声明
2.4宏定义
3.工程结构
3.1main.c负责主函数编写
3.2功能代码.c负责功能代码编写
3.3功能代码.h主要负责声明功能代码.c的功能函数
3.4调用函数的文件只需加对应函数的.h头文件即可使用该函数
(三)条件编译
#if 条件满足加入编译
#elif 如果if不满足条件elif满足加入编译
#else if不满足代码加入编译
#endif 条件编译结束
#ifdef 定义了宏,代码加入编译
#ifndef 没有定义宏代码加入编译