【C语言笔记】【linux宏定义系列】 变量的类型检查 typecheck
linux宏定义系列内容。用于记录在linux kernel之中各式各样的宏定义☺。
宏定义说明
用于在编译时检测变量是否是某个特定的数据类型。
该宏定义来自linux kernel 5.8。
实现代码
#define typecheck(type,x) \
({ type __dummy; \
typeof(x) __dummy2; \
(void)(&__dummy == &__dummy2); \
1; \
})
宏定义中:
type表示要用来对比的数据类型。
x表示要用来对比的变量。
示例程序
示例程序1:用于检测变量是否是int类型。类型相同,不会有警告。
int main(int argc, char* argv[])
{
int x;
typecheck(int, x);
return 0;
}
示例程序2:用于检测变量是否是char类型。类型不相同,在编译时会提示警告:比较不相关的指针时缺少类型转换。
int main(int argc, char* argv[])
{
int x;
typecheck(char, x);
return 0;
}
实现过程
-
type __dummy
typeof(x) __dummy2
先声明一个要对比类型
type
的变量__dummy
和一个与变量x
相同类型的变量__dummy2
。 -
(void)(&__dummy == &__dummy2)
取两个变量的指针进行比较,如果类型不相同,就没办法比较,导致编译器提示警告。
-
1
这个1是作为表达式的返回值,以便可以在比较中使用它。
[参考资料]
linux kernel 5.8
/include/linux/typecheck.h
本文链接:https://blog.csdn.net/u012028275/article/details/118073152