我有以下结构:
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
,那么包含在其中的任何其他指针也会受到限制(如同我的例子。)
答案 0 :(得分:5)
restrict
仅适用于带注释的指针本身(或通过指针算法生成的指针),而不适用于通过该指针检索的任何值。
我不确定'严格别名'的含义应该是什么意思,但restrict
是一个比严格别名更强大的承诺。严格别名允许兼容类型的指针与别名:restrict
是一个没有别名的承诺。