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