欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1990|回復: 8
打印 上一主題 下一主題
收起左側

這段C語言宏定義代碼是什么意思?

[復制鏈接]
跳轉到指定樓層
樓主
ID:700956 發表于 2023-10-25 08:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這段代碼怎么理解,宏定義不是代表一個變量嗎,像這樣#define MAXTIME 1000,怎么還能代表多個?
  1. /*******************************************************************
  2.                             AD按鍵表
  3. *******************************************************************/
  4. #define ADKEY_BT_SHORT                \
  5.                         /*00*/    NO_MSG,\
  6.                         /*01*/    NO_MSG,\
  7.                         /*02*/    MSG_BT_CALL_REJECT,\
  8.                         /*03*/    MSG_BT_CALL_HANGUP,\
  9.                         /*04*/    MSG_BT_CALL_LAST_NO,\
  10.                         /*05*/    MSG_EQ_MODE,\
  11.                         /*06*/    MSG_CHANGE_WORKMODE,\
  12.                         /*07*/    MSG_BT_PREV_FILE,\
  13.                         /*08*/    MSG_BT_NEXT_FILE,\
  14.                         /*09*/    MSG_BT_PP,


  15. #define ADKEY_BT_LONG                \
  16.                         /*00*/    NO_MSG,\
  17.                         /*01*/    NO_MSG,\
  18.                         /*02*/    NO_MSG,\
  19.                         /*03*/    NO_MSG,\
  20.                         /*04*/    NO_MSG,\
  21.                         /*05*/    NO_MSG,\
  22.                         /*06*/    NO_MSG,\
  23.                         /*07*/    MSG_VOL_DOWN,\
  24.                         /*08*/    MSG_VOL_UP,\
  25.                         /*09*/    MSG_POWER_OFF,

  26. #define ADKEY_BT_HOLD                \
  27.                         /*00*/    NO_MSG,\
  28.                         /*01*/    NO_MSG,\
  29.                         /*02*/    NO_MSG,\
  30.                         /*03*/    NO_MSG,\
  31.                         /*04*/    NO_MSG,\
  32.                         /*05*/    NO_MSG,\
  33.                         /*06*/    NO_MSG,\
  34.                         /*07*/    MSG_VOL_DOWN,\
  35.                         /*08*/    MSG_VOL_UP,\
  36.                         /*09*/    MSG_POWER_OFF_HOLD,

  37. #define ADKEY_BT_LONG_UP        \
  38.                         /*00*/    NO_MSG,\
  39.                         /*01*/    NO_MSG,\
  40.                         /*02*/    NO_MSG,\
  41.                         /*03*/    NO_MSG,\
  42.                         /*04*/    NO_MSG,\
  43.                         /*05*/    NO_MSG,\
  44.                         /*06*/    NO_MSG,\
  45.                         /*07*/    MSG_VOL_KEY_UP,\
  46.                         /*08*/    MSG_VOL_KEY_UP,\
  47.                         /*09*/    MSG_POWER_KEY_UP,


  48. const u16 task_bt_ad_table[4][KEY_REG_AD_MAX] = {
  49.     /*短按*/            {ADKEY_BT_SHORT},
  50.     /*長按*/                {ADKEY_BT_LONG},
  51.     /*連按*/                {ADKEY_BT_HOLD},
  52.     /*長按抬起*/        {ADKEY_BT_LONG_UP},
  53. };
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1093026 發表于 2023-10-25 08:52 | 只看該作者
替換進去,就是一個二維數組
回復

使用道具 舉報

板凳
ID:883242 發表于 2023-10-25 11:25 | 只看該作者
這四個就是二維數組task_bt_ad_table的初值。
回復

使用道具 舉報

地板
ID:628113 發表于 2023-10-25 17:25 | 只看該作者
樓主 低估宏定義了。  宏定義可以代替 幾乎  所有東西 ,除了不含分割/運算符的特殊情況。

宏定義的含義是, 在編譯時 , 用 宏 替換掉 源程序。
所以 宏不但可以是變量, 也可以是 函數,甚至是整個程序的一部分代碼。幾乎可以是任何東西。

不好用的情況是沒有分割運算符, 例如:
#define MM  "Matix"
函數 int  GetMatix();    不能替換為 int GetMM() ;
回復

使用道具 舉報

5#
ID:1094811 發表于 2023-10-25 22:36 來自觸屏版 | 只看該作者
宏定義是編譯器最開始編譯的,編譯器做的事很簡單,直接文本替換
回復

使用道具 舉報

6#
ID:883242 發表于 2023-10-25 23:28 | 只看該作者
ppcbug 發表于 2023-10-25 17:25
樓主 低估宏定義了。  宏定義可以代替 幾乎  所有東西 ,除了不含分割/運算符的特殊情況。

宏定義的含義 ...

可以用##連接符。
回復

使用道具 舉報

7#
ID:108361 發表于 2023-10-26 14:37 | 只看該作者
宏只是文本替換,本質上就是替換編輯器里的字符
回復

使用道具 舉報

8#
ID:108361 發表于 2023-10-26 14:38 | 只看該作者
只不過宏有一些操作符,比純粹的手寫字符多了一點功能,不如##連接符號,我記得contiki這個協程操作系統就是巧妙利用宏的操作符,將一個巨大的switchcase偽裝成了一個多任務系統的樣式
回復

使用道具 舉報

9#
ID:401564 發表于 2023-10-26 22:07 | 只看該作者
宏定義就是文本替換
可以對一個文本進行多個定義,方便代碼編寫
比如,控制端口低電平開啟PNP三極管可以這樣定義
#define ON 0
#define OFF 1
LED = ON;要比 LED = 0;更好理解
如果程序中還有其它是要高電平開啟的,就可以這樣定義
#define HI 1
#define LOW 0
這樣程序理起來就不會一下子0開,一下子1開.....思維不會過于別扭
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表