限制在函数签名中的含义是什么?

int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg); 

我想知道限制的含义是什么?

这是在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。 但是,如果我们添加restrictadd像这样:

 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; }