logo

__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('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 
Luo tietokilpailu