1类型重定义 typedef
typedef关键字
属性:关键字
功能:将数据类型重新定义别名 (数据类型 别名)
格式:typedef数据类型名 别名;
例子:typedef unsigned char u8;
位置:标准位置应该放在工程的.h文件
没有.h文件放在主函数上面
好处:写复杂数据类型更方便
#include <stdio.h>
typedef unsigned char u8; //不一定都用u8 有的用uint8_t
typedef unsigned short u16;
typedef unsigned int u32;
使用场景:对结构体类型重命名
2宏定义#define
#define 预处理
属性:预处理
功能:在预处理的时候,将程序中的语句或表达式 重命名(别名)
格式:
不带参宏定义
带参宏定义
格式: #defind 别名 要宏定义的内容 //别名在前 没有分号 要宏定义的内容加括号
说明:宏名用大写
例子:#define LED_ON (GPIO->&=~(1<<4))
位置:放在.h文件中
放在.c最上面
好处:使程序简单,更直观,方便程序维护
使用场景:传感器功能码,特殊功能等等
分类:标准宏定义
带参宏定义
格式:#define 别名(参数) (宏定义内容)
例子:#define MM(a,b) (a+b*a)
3条件编译
说明:
条件编译要跟条件执行(选择结构)区分开;
条件编译:根据数据决定是否编译代码
条件执行:根据条件决定是否执行代码
功能1:按照不同的条件去编译不同的程序部分,因此产生不同的目标代码文件。节省代码存储空间。
格式:
#define VL
int main(void)
{
#ifdef VL
程序1
#else
程序2
#endif
return 0;
}
#ifdef VL
printf("版本1界面\n");
#endif
#ifdef VK
printf("版本2界面\n");
#endif
#ifdef VJ
printf("版本3界面\n");
#endif
#ifdef VH
printf("版本4界面\n");
#endif
功能2:条件编译防止代码重复编译
#ifndef 标签名
#define 标签名
#endif