Sintaxis __attribute__((constructor)) y __attribute__((destructor)) en C

Escriba dos funciones en C usando el compilador GCC, una de las cuales se ejecuta antes de la función principal y la otra se ejecuta después de la función principal. Sintaxis específicas de GCC : 1. __atributo__((constructor)) sintaxis: esta sintaxis GCC particular, cuando se usa con una función, ejecuta la misma función al inicio del programa, es decir, antes principal() función. 2. __atributo__((destructor)) sintaxis: esta sintaxis GCC particular, cuando se usa con una función, ejecuta la misma función justo antes de que el programa finalice a través de _exit, es decir, después principal() función. Explicación : La forma en que funcionan los constructores y destructores es que el archivo de objeto compartido contiene secciones especiales (.ctors y .dtors en ELF) que contienen referencias a las funciones marcadas con los atributos de constructor y destructor respectivamente. Cuando se carga/descarga la biblioteca, el programa de carga dinámica comprueba si existen dichas secciones y, de ser así, llama a las funciones a las que se hace referencia en ellas. Algunos puntos al respecto son dignos de mención: 1. __atributo__((constructor)) se ejecuta cuando se carga una biblioteca compartida, normalmente durante el inicio del programa. 2. __atributo__((destructor)) se ejecuta cuando la biblioteca compartida se descarga, normalmente al salir del programa. 3. Se supone que los dos paréntesis sirven para distinguirlos de las llamadas a funciones. 4. __atributo__ es una sintaxis específica de GCC; no es una función ni una macro. código de conductor : CPP
   // C program to demonstrate working of   // __attribute__((constructor)) and   // __attribute__((destructor))   #include      // Assigning functions to be executed before and   // after main()   void     __attribute__  ((  constructor  ))     calledFirst  ();   void     __attribute__  ((  destructor  ))     calledLast  ();   void     main  ()   {      printf  (  '  n  I am in main'  );   }   // This function is assigned to execute before   // main using __attribute__((constructor))   void     calledFirst  ()   {      printf  (  '  n  I am called first'  );   }   // This function is assigned to execute after   // main using __attribute__((destructor))   void     calledLast  ()   {      printf  (  '  n  I am called last'  );   }   
Output:
I am called first I am in main I am called last  
Crear cuestionario