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. Sintaxis __attribute__((constructor)) : Esta sintaxis GCC particular, cuando se usa con una función, ejecuta la misma función al inicio del programa, es decir, antes de la función main() .
2. Sintaxis __attribute__((destructor)) : Esta sintaxis GCC en particular, cuando se usa con una función, ejecuta la misma función justo antes de que el programa termine a través de _exit, es decir, después de la función main() .
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 constructor y destructor, respectivamente. Cuando se carga/descarga la biblioteca, el programa cargador dinámico comprueba si existen dichas secciones y, en caso afirmativo, llama a las funciones a las que se hace referencia en ellas.
Vale la pena señalar algunos puntos con respecto a estos:
1. __attribute__((constructor)) se ejecuta cuando se carga una biblioteca compartida, generalmente durante el inicio del programa.
2. __attribute__((destructor)) se ejecuta cuando se descarga la biblioteca compartida, normalmente al salir del programa.
3. Presumiblemente, los dos paréntesis son para distinguirlos de las llamadas a funciones.
4. __attribute__ es una sintaxis específica de GCC, no una función ni una macro.
Código del conductor :
// C program to demonstrate working of // __attribute__((constructor)) and // __attribute__((destructor)) #include<stdio.h> // 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"); }
Producción:
I am called first I am in main I am called last
Este artículo es una contribución de Rishav Raj . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
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