标题:
这段C语言宏定义代码是什么意思?
[打印本页]
作者:
阿常
时间:
2023-10-25 08:38
标题:
这段C语言宏定义代码是什么意思?
这段代码怎么理解,宏定义不是代表一个变量吗,像这样
#define MAXTIME 1000,
怎么还能代表多个?
/*******************************************************************
AD按键表
*******************************************************************/
#define ADKEY_BT_SHORT \
/*00*/ NO_MSG,\
/*01*/ NO_MSG,\
/*02*/ MSG_BT_CALL_REJECT,\
/*03*/ MSG_BT_CALL_HANGUP,\
/*04*/ MSG_BT_CALL_LAST_NO,\
/*05*/ MSG_EQ_MODE,\
/*06*/ MSG_CHANGE_WORKMODE,\
/*07*/ MSG_BT_PREV_FILE,\
/*08*/ MSG_BT_NEXT_FILE,\
/*09*/ MSG_BT_PP,
#define ADKEY_BT_LONG \
/*00*/ NO_MSG,\
/*01*/ NO_MSG,\
/*02*/ NO_MSG,\
/*03*/ NO_MSG,\
/*04*/ NO_MSG,\
/*05*/ NO_MSG,\
/*06*/ NO_MSG,\
/*07*/ MSG_VOL_DOWN,\
/*08*/ MSG_VOL_UP,\
/*09*/ MSG_POWER_OFF,
#define ADKEY_BT_HOLD \
/*00*/ NO_MSG,\
/*01*/ NO_MSG,\
/*02*/ NO_MSG,\
/*03*/ NO_MSG,\
/*04*/ NO_MSG,\
/*05*/ NO_MSG,\
/*06*/ NO_MSG,\
/*07*/ MSG_VOL_DOWN,\
/*08*/ MSG_VOL_UP,\
/*09*/ MSG_POWER_OFF_HOLD,
#define ADKEY_BT_LONG_UP \
/*00*/ NO_MSG,\
/*01*/ NO_MSG,\
/*02*/ NO_MSG,\
/*03*/ NO_MSG,\
/*04*/ NO_MSG,\
/*05*/ NO_MSG,\
/*06*/ NO_MSG,\
/*07*/ MSG_VOL_KEY_UP,\
/*08*/ MSG_VOL_KEY_UP,\
/*09*/ MSG_POWER_KEY_UP,
const u16 task_bt_ad_table[4][KEY_REG_AD_MAX] = {
/*短按*/ {ADKEY_BT_SHORT},
/*长按*/ {ADKEY_BT_LONG},
/*连按*/ {ADKEY_BT_HOLD},
/*长按抬起*/ {ADKEY_BT_LONG_UP},
};
复制代码
作者:
hero_71
时间:
2023-10-25 08:52
替换进去,就是一个二维数组
作者:
Hephaestus
时间:
2023-10-25 11:25
这四个就是二维数组task_bt_ad_table的初值。
作者:
ppcbug
时间:
2023-10-25 17:25
楼主 低估宏定义了。 宏定义可以代替 几乎 所有东西 ,除了不含分割/运算符的特殊情况。
宏定义的含义是, 在编译时 , 用 宏 替换掉 源程序。
所以 宏不但可以是变量, 也可以是 函数,甚至是整个程序的一部分代码。几乎可以是任何东西。
不好用的情况是没有分割运算符, 例如:
#define MM "Matix"
函数 int GetMatix(); 不能替换为 int GetMM() ;
作者:
chenmingwu
时间:
2023-10-25 22:36
宏定义是编译器最开始编译的,编译器做的事很简单,直接文本替换
作者:
Hephaestus
时间:
2023-10-25 23:28
ppcbug 发表于 2023-10-25 17:25
楼主 低估宏定义了。 宏定义可以代替 几乎 所有东西 ,除了不含分割/运算符的特殊情况。
宏定义的含义 ...
可以用##连接符。
作者:
powerdruy
时间:
2023-10-26 14:37
宏只是文本替换,本质上就是替换编辑器里的字符
作者:
powerdruy
时间:
2023-10-26 14:38
只不过宏有一些操作符,比纯粹的手写字符多了一点功能,不如##连接符号,我记得contiki这个协程操作系统就是巧妙利用宏的操作符,将一个巨大的switchcase伪装成了一个多任务系统的样式
作者:
Y_G_G
时间:
2023-10-26 22:07
宏定义就是文本替换
可以对一个文本进行多个定义,方便代码编写
比如,控制端口低电平开启PNP三极管可以这样定义
#define ON 0
#define OFF 1
LED = ON;要比 LED = 0;更好理解
如果程序中还有其它是要高电平开启的,就可以这样定义
#define HI 1
#define LOW 0
这样程序理起来就不会一下子0开,一下子1开.....思维不会过于别扭
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1