受检指针类型包括:
ptr<T>
(简写为ptr
):指向单个类型为T元素的指针
array_ptr<T>
(简写为arr
):指向类型为T的数组的指针
nt_array_ptr<T>
(简写为ntarr
):指向以NULL结尾的类型为T数组的指针
其中arr
和ntarr
指针均关联一个边界(bounds),用于定义指针引用的内存范围。以下是三种边界声明方式及其对应的内存区域(右侧方括号表示左闭右开区间):
ntarr
指针的边界语义类似,但其内存区域可向右扩展直至遇到NULL终止符(即NULL不在边界范围内)。
边界表达式(如上述count(n)
中的n)可引用作用域内的变量;结构体成员在边界表达式中可引用相邻字段。为保证健全性(soundness),边界表达式中使用的变量既不可被修改,也不可获取其地址,因此某些传统编程模式可能不受支持(参见第3.1节的完整示例)。
Checked C还支持函数和结构体的多态(泛型)类型。例如,以下代码定义了一个返回T类型对象数组的泛型分配函数:
for_any(T) array_ptr