类型保证
强类型的编程语言通常编译器自带一些类型检查,保证代码编译后不会出现类型方面的错误,比如 Rust 之类的甚至做了变量的生命周期检查,以防止内存出错或者未定义行为。常见的变成语言类型如下:
typecheck
但是 C 为弱类型语言,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说 C 语言的 int 可以变成 double。这样的结果是:容易产生 forbidden behaviours。为了解决类似问题,Linux 内核中的这个宏比较有技巧。
#define typecheck(type,x) \
({ type __dummy; \
typeof(x) __dummy2; \
(void)(&__dummy == &__dummy2); \
1; \
})
使用的时候可以保证某些变量为特定的类型:
int a;
typecheck(char, a);
这样就会报出一个编译错误: