成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C語言X-MACRO宏使用技巧

開發 后端
今天分享一個C語言宏定義小技巧,從語法上來看比較簡單技巧 ,不過一旦真正領悟到其精妙之處不僅可以簡化代碼、還能提高代碼的可擴展性。

1、#define與#undef

X-MACRO宏技術的核心在于靈活的應用#define與#undef,對于玩C語言的伙計#define是再熟悉不過了,但#undef卻鮮有人在實際的開發過程中熟練使用,基本上都是#define走天下。

那#define的作用域是怎樣的呢?其作用范圍都是從宏定義處到文件結束,不管函數內外均可以隨意使用。

那一不小心使用#define重復定義相同的宏又會怎樣呢?對于大部分編譯器會報重復定義警告,但也有小部分編譯器采用最近的宏定義直接通過,所以稍不留神就把bug引入到了代碼中。

其實對于C語言編程素養良好的工程師們多會使用#undef來限制宏定義的作用范圍,即取消宏定義,以免造成宏泛濫。

1#include <stdio.h>
2#include <stdlib.h>
3
4#define HELLO_BUG 100
5
6int main(int argc, char *argv[]) {
7
8 printf("hello bug %d\r\n",HELLO_BUG);
9
10#undef HELLO_BUG
11
12 printf("hello bug %d\r\n",HELLO_BUG);
13 return 0;
14}

如上代碼所示,便會編譯報錯,提示第二條打印語句HELLO_BUG宏未定義。

2、X-MACRO

X-MACRO平時我們也叫"X宏",其實在bug菌之前的文章<三種管理C程序中標志位的方法,最后一種比較秀~>有一個簡單的提及,今天單獨擰出來簡化講講。

1#define X_MACRO(a, b)   a
2//do something
3#undef X_MACRO
4
5#define X_MACRO(a, b) b
6//do something
7#undef X_MACRO

如上是X-MACRO的比較精華的幾句,通過#define與#undef的配合,可以使用相同的宏名稱選擇性的替換出我們想要的結構,從而達到簡化代碼的目的。同時我們也非常清楚,由于宏主要是靠編譯器來處理,所以X-MACRO技巧也主要是在編譯階段來維護代碼。

下面來一波操作看看效果吧:

1/*************消息定義**********/
2#define MSG_TABLE \
3 X_MACROS(USER_MSG1, MsgProc1) \
4 X_MACROS(USER_MSG2, MsgProc2) \
5 X_MACROS(USER_MSG3, MsgProc3) \
6
7/*************消息枚舉定義**********/
8typedef enum {
9 #define X_MACROS(a, b) a,
10 MSG_TABLE
11 #undef X_MACROS
12 MSG_MAX
13} MSG_TYPE;
14
15/*************消息處理定義**********/
16const Proc Proc_table[] = {
17 #define X_MACROS(a, b) b,
18 MSG_TABLE
19 #undef X_MACROS
20};
21
22/*************實際使用**********/
23void sMessageProc(MSG_TYPE msgtype)
24{
25 (Proc_table[msgtype])();
26}

當然X-MACRO還可以擴展多個參數來供序列化替換,同時X-MACRO宏定義也可以更加的復雜。

比如使用#define X_MACROS(a, b) #a宏來處理為字符串等。

責任編輯:龐桂玉 來源: C語言與C++編程
相關推薦

2023-11-12 23:14:05

函數C 語言

2024-01-22 00:35:00

C++函數開發

2023-10-26 11:03:50

C語言宏定義

2013-06-07 14:35:19

Mac OS X

2023-02-17 08:14:29

C語言C技巧內存

2022-07-29 13:10:16

C語言宏定義命令

2022-02-09 18:15:10

語言宏定義軟件

2022-01-10 18:11:42

C語言應用技巧

2022-02-11 16:01:14

C語言技巧命令

2022-01-28 14:54:21

staticC語言編譯器

2010-01-12 10:11:36

學習C++語言

2010-01-12 15:24:48

C++語言

2010-01-13 16:44:03

C++

2011-04-19 13:07:27

LinuxC語言

2023-01-03 15:47:09

Linux內核C語言

2025-03-28 10:39:17

C++宏定義語言

2010-02-02 14:06:50

C++ const變量

2010-01-13 15:51:44

C++編程語言

2019-07-25 10:45:05

GitHub技巧網站

2021-11-28 22:57:41

C語言STM32寄存器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91高清在线观看 | 久久精品这里精品 | com.色.www在线观看 | 99在线国产 | 色综合久久久久 | 欧美日韩国产一区二区三区 | 欧美舔穴 | 一区二区久久 | 久久av一区 | 黑人中文字幕一区二区三区 | 国产成人精品免费视频大全最热 | 亚洲精品一二三区 | 精品日韩一区二区 | 国产高清在线视频 | 欧美成人精品一区二区男人看 | 91精品www| 黄色av网站在线免费观看 | 91免费小视频 | 韩日精品在线观看 | 欧美电影在线观看网站 | 一级黄色片美国 | 九九久久国产精品 | h视频免费在线观看 | 久久久久久国产精品三区 | 国产精品亚洲第一 | 国产视频久 | 午夜精品久久久久久不卡欧美一级 | 99国产精品久久久久久久 | 成人一级片在线观看 | 亚洲狠狠 | 国产精品久久久久久久久久妞妞 | 国产欧美一级 | 成人精品视频 | 美女一级毛片 | 黑人巨大精品欧美一区二区免费 | 欧美精品一二三 | 久久国产免费 | av网站免费看 | 国产精品一区二区三级 | www.日本国产| 亚洲国产欧美在线人成 |