sea - ¿Cuál es el significado de restringir en la firma de función?
restricciones del dominio (1)
Es algo introducido en C99 que le permite al compilador saber que el puntero que se pasa allí no apunta al mismo lugar que cualquier otro indicador en los argumentos. Si le da esta sugerencia al compilador, puede hacer algunas optimizaciones más agresivas sin romper el código.
Como ejemplo, considere esta función:
int add(int *a, int *b) {
return *a + *b;
}
Obviamente, agrega dos números a partir de los punteros. Podemos usarlo así si queremos:
// includes excluded for brevity
int main(int argc, char **argv) {
int number=4;
printf("%d/n", add(&number, &number));
return 0;
}
Obviamente, saldrá 8; Se está agregando 4 a sí mismo. Sin embargo, si añadimos restrict
para add
como así:
int add(int *restrict a, int *restrict b) {
return *a + *b;
}
Entonces el main
anterior ahora es inválido; Está pasando &number
como ambos argumentos. Sin embargo, puede pasar dos punteros que apuntan a diferentes lugares.
int main(int argc, char **argv) {
int numberA=4;
int numberB=4;
printf("%d/n", add(&numberA, &numberB));
return 0;
}
int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
Me gustaría saber cuál es el significado de restringir?