这是C99中引入的内容,它使编译器知道传入的指针与参数中的任何其他指针都没有指向相同的位置。如果向编译器提供此提示,则它可以进行一些更积极的优化而不会破坏代码。
例如,考虑以下功能:
int add(int *a, int *b) { return *a + *b;}显然,它从指针中添加了两个数字。如果需要,我们可以像这样使用它:
// includes excluded for brevityint main(int argc, char **argv) { int number=4; printf("%dn", 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("%dn", add(&numberA, &numberB)); return 0;}


