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。但是,如果我们添加restrict到add像这样:
restrict
add
int add(int *restrict a, int *restrict b) { return *a + *b; }
那么以前main的命令现在无效;它&number作为两个参数传递。但是,您可以传入两个指向不同位置的指针。
main
&number
int main(int argc, char **argv) { int numberA=4; int numberB=4; printf("%d\n", add(&numberA, &numberB)); return 0; }