c - `restrict` 关键字隐含的严格别名级别是什么?

标签 c arrays struct strict-aliasing

我有以下结构:

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/

相关文章:

arrays - 使用类型推断展平嵌套数组

c# - 嵌套结构作为类中的成员

C 打印文本行并更新它们

c - 为什么 Visual Studio 会忽略我项目中的 .h 文件?

java - 比较二维 boolean 数组值?

objective-c - 在 Objective-C 中编程时什么更有效?结构或一些类似于结构的 Objective-C 数据类型?

c - 尝试将输入存储在具有意外行为的结构类型数组中

c++ int 数组,值为 2 维 int 数组(3d 数组)

c - 用其他子字符串替换字符串的子字符串时出现段错误

javascript - 从 Jquery JSON 请求推送到 Javascript 数组