Macro CRASH() – interpretación

A continuación se muestra un pequeño fragmento de código de un proyecto de código abierto,

#ifndef __cplusplus
  
typedef enum BoolenTag
{
   false,
   true
} bool;
  
#endif
  
#define CRASH() do { \
      ((void(*)())0)(); \
   } while(false)
  
int main()
{
   CRASH();
   return 0;
}

¿Puedes interpretar el código anterior?

Es simple, a continuación se proporciona un enfoque paso a paso,

La declaración while (false) está destinada solo para fines de prueba. Considere la siguiente operación,

((void(*)())0)();

Se puede lograr de la siguiente manera,

Entonces, el código dado está invocando la función cuyo código está almacenado en la ubicación cero, en otras palabras, intenta ejecutar una instrucción almacenada en la ubicación cero. En los sistemas con protección de memoria (MMU), el sistema operativo generará una excepción (falla de segmentación) y en los sistemas sin dicha protección (pequeños sistemas integrados), se ejecutará y el error se propagará aún más.

—  Venki . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *