Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

208
Views
Parámetros declarados restricciones y advertencias del compilador

Ni gcc 5 ni clang 3.6 dan advertencias cuando se violan las restrict del calificador restrict, incluso cuando se llama con -Wall . Considere el siguiente fragmento de código:

 extern void f(char *restrict p, char *restrict q); void g(char *p) { f(p, p); }

Ingenuamente, esperaba que la violación se pudiera determinar de forma estática, y esperaba que -Wall diera una advertencia. ¿Me he perdido una bandera en alguna parte, o hay algún problema con dar advertencias que no estoy viendo?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

A partir de la versión 8, gcc ofrece una advertencia útil para el código anterior:

 ac: In function 'g': ac:5:5: warning: passing argument 1 to restrict-qualified parameter aliases with argument 2 [-Wrestrict] f(p, p); ^
over 4 years ago · Santiago Trujillo Report

0

La palabra clave restrict es una garantía explícita del programador de que los punteros en cuestión no tienen alias. En esencia, permite que el compilador omita el análisis de alias para esos punteros, porque el programador ya proporcionó la supuesta respuesta. Además de permitir una mejor optimización, esto también puede ahorrar tiempo de compilación. En programas grandes, el análisis puede ser bastante costoso, por lo que es potencialmente un gran problema por derecho propio.

Entonces, la respuesta a su pregunta es, creo, "los compiladores no están mirando, porque el código les dice que no se molesten".

over 4 years ago · Santiago Trujillo Report

0

Dado el código:

 void test(int *restrict a, int *restrict b, int c) { a[0] += b[c]; }

el único escenario afectado por el calificador restrict sería a==b+c ; en ese caso, el puntero en a se usaría para modificar un objeto al que también se accede a través de un puntero no relacionado en b . En todos los demás casos que se definirían en ausencia de restrict , ningún objeto al que se acceda a través a también se accedería a través de b , ni viceversa.

Un compilador que pudiera ver que una función que se pasó restrict : los argumentos de puntero calificados los usaron en violación de las reglas asociadas con ellos podría advertir útilmente sobre tal violación, pero un compilador que no puede ver una función no tendría forma de saber qué las combinaciones de argumentos serían válidas o no válidas.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!