当结构体遇上宏定义,以及函数指针的高级写法(结构体中能用宏定义一个函数?)

本文探讨了如何在C语言中利用宏定义在结构体中定义功能,包括普通的宏定义和模拟内联函数的方式。虽然宏不能直接作为结构体成员,但可以通过函数指针实现。文中通过STM32 LwIP的例子展示了结构体结合宏和回调函数指针的高级用法,供学习参考。
摘要由CSDN通过智能技术生成

一、结构体中可以定义一般的宏定义
如:

struct aaa
{
   #define STATUS_1 100
   #define STATUS_2 200
   #define STATUS_3 300
   ........
};
   首先,这里的宏定义是在预编译阶段完成的,编译器此时并不知道什么结构体,所以这些宏是全局可见的。
   一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告。可是如果不在结构体之内,名字重复可肯定是error。(未证实,可以做实验,而且可以把两处的宏定义成不同的值,会是什么情况?)
    定义在结构体之内的宏在结构体内可以隐藏定义在结构体之外定义的宏,如果都在结构体之外定义,那么就是定义了两个相同的宏,而一个在内,一个在外,则结构体内只看到内部定义的宏,而结构体外只看到外部定义的宏,跟变量的隐藏类似。
   宏的处理是在编译的预处理阶段完成的。预处理器根本就不认识什么结构体,在C语言编译器编译这个C文件中的结构体时,这个define语句已经不存在了。 相应的,用到这个宏的地方,宏本身也已经替换成宏的值(这个宏展开)。大家可以用gcc -E命令来只做预处理而不编译,看看出来后的文件。
至于为什么在结构体里头#deifne,是因为这个宏一般用于定义该结构体里头的标志位变量的可能的值,和结构体的这个变量密切相关。放在一起从逻辑上比较容易理解。

来源: http://blog.csdn.net/shiniji_hh1126/article/details/6084658

二、同理结构体中用宏定义一个类似于函数的东西(类似于C++内联函数)
如:

#define NETIF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值