C语言之宏定义使用
前言
C语言中宏定义使用广泛,例如使用宏替代“魔鬼数字”、利用宏代替函数做简单的处理提高效率、实现条件定义等等。
一、使用宏定义替代“魔鬼数字”
不论是自己写代码还是看他人代码,魔鬼数字是比较让人头大的写法,魔鬼数字让阅读代码的人难以理解,同时自己写的代码常时间不看遇到魔鬼数字也会一脸懵逼,想着是哪个傻叉写的,一看作者是自己。。。。。。
- 使用宏代替魔鬼数字的方法如下:
//已控制灯光为例,例如根据电机转动状态控制状态灯的点亮、熄灭、快速闪烁。
使用魔鬼数字方式:
/*返回值0、1、2分别对应电机停止转动、电机快转、电机慢转*/
int led_mode = 0;
led_mode = get_motor_status();
switch (led_mode) {
case 0: {
led_close();
}
break;
case 1: {
led_flash();
}
break;
case 2: {
led_slow();
}
break;
default:
break;
}
使用宏定义方式:
#define MOTOR_STOP 0
#define MOTOR_RUN_FAST 1
#define MOTOR_RUN_SLOW 2
int led_mode = 0;
led_mode = get_motor_status();
switch (led_mode) {
case MOTOR_STOP: {
led_close();
}
break;
case MOTOR_RUN_FAST: {
led_flash();
}
break;
case MOTOR_RUN_SLOW: {
led_slow();
}
break;
default:
break;
}
可以明显看出,宏定义相对于魔鬼数字更易于理解
二、参数宏
对于简单的逻辑处理可以用宏代替函数,在对时间要求较高的场景可以使用,参数宏相对于函数会节省时间和空间。
例如:
#define min(a,b) ((a > b) ? b : a )
在对时间要求较为严格且逻辑处理简单的场景,可以使用这种参数宏代替函数,会节省空间和时间
三、条件定义
条件定义可以增加程序的健壮性,例如可以使用条件定义,在不删除原有基线代码的基础上,选择性的只将想要用的代码编译。
- 例如头文件中加上条件定义代码,如果之前已经编译了同名头文件,那么就不在将当前头文件编译进工程,防止导致出错
#ifndef _PWM_H_
#define _PWM_H_
//自行定义,例如PWM的引进设置,函数声明
#endif
- 可以通过宏控制开启关闭代码段
#define FLASH_TEST 1//0
//如果FLASH_TEST为1则执行flash测试代码,为0则执行正常的应用程序
#if FLASH_TEST
flash_test();
#else
app_init();
#endif
后续补充
如果漏洞欢迎大佬们指出,一同交流