【C语言笔记】【宏定义系列】 变量的类型检查

【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;
}

实现过程

  1. type __dummy
    typeof(x) __dummy2

    先声明一个要对比类型type的变量__dummy和一个与变量x相同类型的变量__dummy2

  2. (void)(&__dummy == &__dummy2)

    取两个变量的指针进行比较,如果类型不相同,就没办法比较,导致编译器提示警告。

  3. 1

    这个1是作为表达式的返回值,以便可以在比较中使用它。

[参考资料]

linux kernel 5.8

/include/linux/typecheck.h


本文链接:https://blog.csdn.net/u012028275/article/details/118073152

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值