自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C語言X-MACRO宏使用技巧

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

1、#define與#undef

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

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

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

其實對于C語言編程素養(yǎng)良好的工程師們多會使用#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還可以擴展多個參數(shù)來供序列化替換,同時X-MACRO宏定義也可以更加的復雜。

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

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

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

2022-07-29 13:10:16

C語言宏定義命令

2023-02-17 08:14:29

C語言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++語言

2025-03-28 10:39:17

C++宏定義語言

2010-01-13 16:44:03

C++

2011-04-19 13:07:27

LinuxC語言

2023-01-03 15:47:09

Linux內核C語言

2010-01-13 15:51:44

C++編程語言

2010-02-02 14:06:50

C++ const變量

2019-07-25 10:45:05

GitHub技巧網(wǎng)站

2021-11-11 15:12:21

C語言線程代碼
點贊
收藏

51CTO技術棧公眾號