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

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  (  '  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  
Crea un qüestionari