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('nI am in main'); } // This function is assigned to execute before // main using __attribute__((constructor)) void calledFirst() { printf('nI am called first'); } // This function is assigned to execute after // main using __attribute__((destructor)) void calledLast() { printf('nI am called last'); }
Output: I am called first I am in main I am called last
Crear cuestionario