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 lastCrear cuestionario