Escriu dues funcions en C utilitzant el compilador GCC, una de les quals s'executa abans de la funció principal i l'altra s'executa després de la funció principal. Sintaxis específiques de GCC : 1. __atribut__((constructor)) sintaxi: aquesta sintaxi GCC particular quan s'utilitza amb una funció executa la mateixa funció a l'inici del programa, és a dir, abans principal () funció. 2. sintaxi: aquesta sintaxi GCC en particular quan s'utilitza amb una funció executa la mateixa funció just abans que el programa finalitzi mitjançant _exit, és a dir, després principal () funció. Explicació : La manera com funcionen els constructors i els destructors és que el fitxer d'objectes compartit conté seccions especials (.ctors i .dtors a ELF) que contenen referències a les funcions marcades amb els atributs constructor i destructor respectivament. Quan es carrega/descarrega la biblioteca, el programa de càrrega dinàmica comprova si existeixen aquestes seccions i, si és així, crida a les funcions a les quals es fa referència. Cal destacar alguns aspectes al respecte: 1. __atribut__((constructor)) s'executa quan una biblioteca compartida es carrega normalment durant l'inici del programa. 2. __atribut__((destructor)) s'executa quan la biblioteca compartida es descarrega normalment a la sortida del programa. 3. Els dos parèntesis són presumiblement per distingir-los de les trucades de funcions. 4. __atribut__ és una sintaxi específica de GCC; no una funció ni una macro. Codi del 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
Crea un qüestionari