param_check_int的实现解析

param_check_int宏的定义如下:

#define param_check_int(name, p) __param_check(name, p, int)
#define __param_check(name, p, type) \
             static inline type __always_unused *__check_##name(void) { return(p); }

假如有如下变量定义:

int g_count = 0;

那么执行param_check_int()宏时,有如下展开:

param_check_int(g_count,g_count)
--> __param_check(g_count,g_count,int)
-->static inline int __always_unused *__check_g_count(void)
{
 return (g_count);
}

其中,__always_unused用来防止编译器发出警告(因为定义的函数__check_g_count没有使用)。
分析上面展开结果,可以发现,
1:若g_count的类型与函数__check_g_count的返回值类型不一致,则会产生警告(因此可以实现检查g_count的类型是否为int的检查)。
2:g_count需要在调用param_check_int宏之前定义好,否则函数__check_g_count中的语句:return (g_count),会产生g_count未定义的错误。因此,该宏也可以实现检查变量是否已经定义的功能。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值