文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言X-MACRO宏使用技巧

2024-12-01 15:06

关注

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++编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯