我有以下结构:
typedef struct{
int data[LENGTH];
}Data;
并像这样使用它:
Data* dt=CALLOC(...)
int foo(Data* restrict d){
for(...)
d[i]->data[j];
//do stuff with data[]
}
我的问题是:从 d
中删除严格别名是否也会影响其成员,或者我是否需要单独对它们使用 restrict
?换句话说,restrict
是否意味着结构中包含的所有 指针都得到相同的处理?
编辑:通过别名级别,我的意思是,如果指向结构的指针受到限制
,那么其中包含的任何其他指针也会受到限制(就像以我的例子为例)。
最佳答案
restrict
仅适用于带注释的指针本身(或从其生成的指针,例如通过指针算术),不适用于通过该指针检索的任何值。
我不确定“严格别名的级别”是什么意思,但是 restrict
是比严格别名更强大的 promise 。严格别名允许兼容类型的指针指向别名:restrict
promise 根本不存在别名。
关于c - `restrict` 关键字隐含的严格别名级别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19731256/