param_check_int的实现解析

来源:互联网 发布:json与xml的区别 编辑:程序博客网 时间:2024/06/16 01:17

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未定义的错误。因此,该宏也可以实现检查变量是否已经定义的功能。

0 0
原创粉丝点击