gpt4 book ai didi

c - restrict 关键字对唯一指针类型的参数没有意义吗?

转载 作者:太空狗 更新时间:2023-10-29 16:10:39 27 4
gpt4 key购买 nike

我注意到在我们的一个遗留项目中大量使用了 restrict 关键字。
我理解 restrict 的基本原理,但我质疑它在应用于其中一些功能时是否有用。

举下面两个例子:

void funcA(int *restrict i){
// ...
}

void funcB(int *restrict i, float *restrict f){
// ...
}

int main(){

int i = 1;
float f = 3.14;

funcA(&i);
funcB(&i,&f);
}

是否有任何正当理由可以使用 restrict 标记 funcAfuncB 的参数?

funcA 只接受 1 个参数。它怎么可能和其他东西有相同的地址呢?

funcB 接受不同类型的参数。如果它们是同一个地址,那岂不是已经违反了严格的别名规则?

最佳答案

restrict 对于单指针参数函数不是没有意义。

restrict 关键字是一个意图声明,用于改进优化。这意味着在(在这种情况下)函数参数的生命周期内,给定指针指向的对象将不会被任何其他指向。

你没有显示函数的代码,所以里面可能有静态变量。 Restrict 保证那些静态变量不会给参数起别名。

您的示例中可能没有显示全局变量。 Restrict 保证这些全局变量不会给参数起别名。

实际上,您是对的:很可能有人对 restrict 有点着迷了。但是 restrict 意味着“这个参数和那个参数”。它的意思是“这个指针和任何其他指针”。

关于c - restrict 关键字对唯一指针类型的参数没有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42164445/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com