Syntaxe __attribute__((konštruktor)) a __attribute__((deštruktor)) v jazyku C

Napíšte dve funkcie v C pomocou kompilátora GCC, z ktorých jedna sa vykoná pred hlavnou funkciou a druhá sa vykoná po hlavnej funkcii. GCC špecifické syntaxe : 1. __attribute__((konštruktor)) syntax : Táto konkrétna syntax GCC pri použití s ​​funkciou vykonáva rovnakú funkciu pri spustení programu, tj pred hlavný() funkciu. 2. __attribute__((deštruktor)) syntax : Táto konkrétna syntax GCC pri použití s ​​funkciou vykoná rovnakú funkciu tesne pred ukončením programu cez _exit, tj po hlavný() funkciu. Vysvetlenie : Spôsob, akým konštruktory a deštruktory fungujú, je taký, že zdieľaný objektový súbor obsahuje špeciálne sekcie (.ctors a .dtors na ELF), ktoré obsahujú odkazy na funkcie označené atribútmi konštruktor a deštruktor. Keď sa knižnica načíta/uvoľní, program dynamického zavádzača skontroluje, či takéto sekcie existujú, a ak áno, zavolá funkcie, na ktoré sa v nich odkazuje. V tejto súvislosti stojí za zmienku niekoľko bodov: 1. __attribute__((konštruktor)) beží, keď sa načíta zdieľaná knižnica, zvyčajne počas spúšťania programu. 2. __attribute__((deštruktor)) spustí sa, keď je zdieľaná knižnica uvoľnená, zvyčajne pri ukončení programu. 3. Dve zátvorky ich majú pravdepodobne odlíšiť od volaní funkcií. 4. __atribút__ je syntax špecifická pre GCC; nie funkcia ani makro. Kód vodiča : 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  
Vytvoriť kvíz