typecheck

本文深入解析了内核2.6.30源码中typecheck宏的功能,通过具体例子展示其如何检查变量是否为特定类型,以及在实际编程中的应用价值。

在kernel 2.6.30 的typecheck.h源码中有如下定义

#define typecheck(type,x) /
({        type __dummy; /
        typeof(x) __dummy2; /
        (void)(&__dummy == &__dummy2); /
        1; /
})
这个有什么作用呢?下面举例来说明
#define time_after(a,b)                /
        (typecheck(unsigned long, a) && /
         typecheck(unsigned long, b) && /
         ((long)(b) - (long)(a) < 0))

typecheck宏有两个参数,
第一个是一个类型,比如unsigned long,
第二个是一个变量,比如a。
它生成一个unsigned long类型的变量__dummy,
然后利用typeof生成和a同样类型的变量__dummy2,
比较__dummy和__dummy2的地址。
如果它们不是同样类型的指针比较,比如a不是unsigned long,
这时候编译器会有一个警告,让你注意到这个问题。

关于最后的1是复杂的表达式最后会有一个值,这个值就是1


简单的说就是检查x是不是type类型的变量,否则发出警告

在 Vue 开发中,属性类型检查失败(`type check failed for prop`)是一个常见的警告,通常发生在组件的 `props` 类型声明与实际传递的值不匹配时。针对 `type check failed for prop "size"` 的问题,可以从以下几个方面进行排查和解决: ### 1. 确保传递的值与声明的类型一致 Vue 组件中通过 `props` 接收外部传入的数据,如果声明的类型与实际传入的类型不一致,就会触发该警告。例如,若 `size` 被声明为 `Number` 类型,但传入的是字符串 `"12px"`,则会报错: ```ts props: { size: { type: Number, required: true } } ``` 在这种情况下,应确保传递的是一个数字而非字符串。例如,使用 `parseInt` 转换字符串值: ```vue <template> <MyComponent :size="parseInt(sizeString)" /> </template> <script> export default { data() { return { sizeString: "12" }; } }; </script> ``` ### 2. 设置默认值以避免未定义或空值 如果没有为 `props` 设置默认值,并且传入的值为 `null` 或 `undefined`,也可能导致类型检查失败。可以通过设置 `default` 属性来提供一个默认值,以避免类型不匹配的问题: ```ts props: { size: { type: Number, default: 14 // 默认值为 14 } } ``` ### 3. 检查父组件传递的数据源 如果 `size` 是从父组件通过响应式数据(如 `ref` 或 `reactive`)传递过来的,需要确保数据源本身是正确的类型。例如,若使用 `ref`,应确保其值是数字: ```ts const size = ref(16); ``` ### 4. 使用类型断言或类型转换 在某些情况下,如果确定传入的值最终会是正确的类型,可以使用类型断言或显式转换来避免警告: ```vue <MyComponent :size="Number(sizeInput)" /> ``` ### 5. 验证组件调用方式 确保组件调用时使用了正确的绑定方式,如使用 `v-model` 或 `:prop` 正确地传递响应式数据[^2]。 ### 6. 检查第三方库或异步数据加载 如果 `size` 是从异步请求或第三方库中获取的,确保在数据可用后再传递给组件,避免因初始值为 `null` 或 `undefined` 导致类型检查失败。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值