函数签名中的限制是啥意思?

Posted

技术标签:

【中文标题】函数签名中的限制是啥意思?【英文标题】:what is the meaning of restrict in the function signature?函数签名中的限制是什么意思? 【发布时间】:2011-10-05 00:16:24 【问题描述】:
int pthread_create(pthread_t *restrict thread,
              const pthread_attr_t *restrict attr,
              void *(*start_routine)(void*), void *restrict arg);

我想知道restrict是什么意思?

【问题讨论】:

Realistic usage of the C99 'restrict' keyword?的可能重复 【参考方案1】:

这是在 C99 中引入的东西,它让编译器知道传入的指针与参数中的任何其他指针指向的位置不同。如果你给编译器这个提示,它可以在不破坏代码的情况下做一些更积极的优化。

例如,考虑这个函数:

int add(int *a, int *b) 
    return *a + *b;

显然,它从指针中添加两个数字。如果我们愿意,我们可以这样使用它:

// includes excluded for brevity
int main(int argc, char **argv) 
    int number=4;
    printf("%d\n", add(&number, &number));
    return 0;

显然,它会输出 8;它给自己加了 4。但是,如果我们像这样将restrict 添加到add

int add(int *restrict a, int *restrict b) 
    return *a + *b;

那么之前的main现在无效了;它通过&number 作为两个参数。但是,您可以传入两个指向不同位置的指针。

int main(int argc, char **argv) 
    int numberA=4;
    int numberB=4;
    printf("%d\n", add(&numberA, &numberB));
    return 0;

【讨论】:

有关这如何有益的信息,请参阅the Wikipedia page。 @ugho:它的好处显而易见,想想你将如何实现memmove()

以上是关于函数签名中的限制是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

这个函数的签名是啥意思?

“队列段(1796152)作为段持续时间将超出缓冲区限制”是啥意思?

淘宝登录Session 是啥意思啊

函数签名中变量名前的 * 和 ** 是啥意思? [复制]

C语言中stdout是啥意思?

dateserial是啥意思