2

我有以下结构:

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编辑,那么包含在其中的任何其他指针也会受到限制(就像我的例子一样)。

4

1 回答 1

5

restrict仅适用于带注释的指针本身(或从它生成的指针,例如通过指针算术),而不适用于通过该指针检索的任何值。

我不确定“严格别名的级别”应该是什么意思,但restrict它比严格别名的承诺更强大。严格的别名允许兼容类型的指针指向别名:restrict这是一个完全没有别名的承诺。

于 2013-11-01T17:19:57.517 回答