__attribute__((konstruktori)) ja __attribute__((destructor)) -syntaksit C:ssä

Kirjoita C:ssä kaksi funktiota GCC-kääntäjällä, joista toinen suoritetaan ennen pääfunktiota ja toinen pääfunktion jälkeen. GCC-spesifiset syntaksit : 1. __attribuutti__((konstruktori)) syntaksi: Tämä tietty GCC-syntaksi, kun sitä käytetään funktion kanssa, suorittaa saman toiminnon ohjelman käynnistyksen yhteydessä, eli ennen pää() toiminto. 2. __attribuutti__((tuhoaja)) syntaksi: Tämä tietty GCC-syntaksi, kun sitä käytetään funktion kanssa, suorittaa saman toiminnon juuri ennen ohjelman päättymistä _exit:n kautta, eli sen jälkeen pää() toiminto. Selitys : Konstruktorit ja destruktorit toimivat siten, että jaettu objektitiedosto sisältää erityisiä osioita (.ctors ja .dtors ELF:ssä), jotka sisältävät viittauksia konstruktori- ja destructor-attribuutteilla merkittyihin funktioihin. Kun kirjasto ladataan/puretaan, dynaaminen latausohjelma tarkistaa, onko tällaisia ​​osia olemassa, ja jos on, kutsuu niissä viitattuja toimintoja. Muutama huomion arvoinen seikka näistä: 1. __attribuutti__((konstruktori)) suoritetaan, kun jaettu kirjasto ladataan yleensä ohjelman käynnistyksen aikana. 2. __attribuutti__((tuhoaja)) suoritetaan, kun jaettu kirjasto puretaan yleensä ohjelman lopettamisen yhteydessä. 3. Kahden sulkumerkin tarkoitus on oletettavasti erottaa ne funktiokutsuista. 4. __attribuutti__ on GCC-spesifinen syntaksi; ei funktio tai makro. Kuljettajan koodi : 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  
Luo tietokilpailu