int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
我想知道restrict是什么意思?
最佳答案
这是在 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;
}
关于c - 函数签名中的 restrict 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6688113/