偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C語言X-MACRO宏使用技巧

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

1、#define與#undef

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

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

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

其實(shí)對(duì)于C語言編程素養(yǎng)良好的工程師們多會(huì)使用#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}

如上代碼所示,便會(huì)編譯報(bào)錯(cuò),提示第二條打印語句HELLO_BUG宏未定義。

2、X-MACRO

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

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的配合,可以使用相同的宏名稱選擇性的替換出我們想要的結(jié)構(gòu),從而達(dá)到簡(jiǎn)化代碼的目的。同時(shí)我們也非常清楚,由于宏主要是靠編譯器來處理,所以X-MACRO技巧也主要是在編譯階段來維護(hù)代碼。

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

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/*************實(shí)際使用**********/
23void sMessageProc(MSG_TYPE msgtype)
24{
25 (Proc_table[msgtype])();
26}

當(dāng)然X-MACRO還可以擴(kuò)展多個(gè)參數(shù)來供序列化替換,同時(shí)X-MACRO宏定義也可以更加的復(fù)雜。

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

責(zé)任編輯:龐桂玉 來源: C語言與C++編程
相關(guān)推薦

2023-11-12 23:14:05

函數(shù)C 語言

2024-01-22 00:35:00

C++函數(shù)開發(fā)

2023-10-26 11:03:50

C語言宏定義

2013-06-07 14:35:19

Mac OS X

2023-02-17 08:14:29

C語言C技巧內(nèi)存

2022-07-29 13:10:16

C語言宏定義命令

2022-02-09 18:15:10

語言宏定義軟件

2022-01-10 18:11:42

C語言應(yīng)用技巧

2022-02-11 16:01:14

C語言技巧命令

2022-01-28 14:54:21

staticC語言編譯器

2010-01-12 10:11:36

學(xué)習(xí)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內(nèi)核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技巧網(wǎng)站

2021-11-28 22:57:41

C語言STM32寄存器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)