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

287
Views
¿Por qué/cuándo usaría/debería usar __attribute__((noreturn))?

Según tengo entendido, este atributo le dice al compilador que una función no regresa. ¿Cuál es el beneficio de especificar esto cuando una función tiene un retorno nulo?

¿En qué se diferencian estas dos funciones?

 void foo(){} __attribute__((noreturn)) void foo(){}
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No significa que la función no devuelva un valor, significa que la función no devuelve nada . Llamar a la función da un viaje de ida.

Hay un uso limitado de esto en la programación relacionada con el hardware, donde no desea que se genere ninguna sobrecarga de llamada de función en la pila del lado de la persona que llama, ya que no va a regresar allí de todos modos.

Por ejemplo, al llamar a void main (void) desde el código de inicio de CRT dentro de un sistema integrado de microcontrolador: estos son sistemas que siguen funcionando hasta que conecta la alimentación y nunca volverán desde main() . Entonces, si el compilador para dicho sistema admite _Noreturn void main (void) , eso crea menos espacio de pila desperdiciado. De lo contrario, el CRT simplemente empujará x bytes en la pila que permanecerá allí para siempre, como espacio muerto.

También podría ser útil para fines de diagnóstico, como cuando se examina el comportamiento de los compiladores. Como se hizo aquí , al demostrar algunos errores importantes en el compilador clang.

over 4 years ago · Santiago Trujillo Report

0

No hay relación entre el tipo de retorno y un comportamiento "sin retorno" de la función.

El tipo de devolución void simplemente dice que esta función no devuelve ningún valor (en caso de que devuelva).

Algunas funciones nunca regresan a la persona que llama. Por ejemplo, algunos bucles infinitos de procesamiento de mensajes, la función exit() o las funciones para reemplazar el proceso actual (como la familia exec* ). El __attribute__((noreturn)) está insinuando al compilador que podría considerar cierta optimización para esta función específica que es válida para funciones que no devuelven, como optimizar la sobrecarga de llamar a dicha función (como guardar el contexto de la persona que llama, devolver dirección y tal).

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!