logo

Sintaksi __attribute__((konstruktor)) in __attribute__((destructor)) v C

Napišite dve funkciji v C s prevajalnikom GCC, od katerih se ena izvede pred glavno funkcijo, druga pa za glavno funkcijo. GCC specifične sintakse : 1. __atribut__((konstruktor)) sintaksa : Ta posebna sintaksa GCC, ko se uporablja s funkcijo, izvede isto funkcijo ob zagonu programa, tj. glavni () funkcijo. 2. __atribut__((destruktor)) sintaksa : ta posebna sintaksa GCC, ko se uporablja s funkcijo, izvede isto funkcijo tik preden se program zaključi prek _exit, tj. glavni () funkcijo. Razlaga : Konstruktorji in destruktorji delujejo tako, da skupna objektna datoteka vsebuje posebne razdelke (.ctors in .dtors na ELF), ki vsebujejo sklice na funkcije, označene z atributoma konstruktor oziroma destruktor. Ko je knjižnica naložena/razložena, dinamični nalagalni program preveri, ali taki razdelki obstajajo, in če obstajajo, pokliče funkcije, navedene v njih. V zvezi s tem je vredno omeniti nekaj točk: 1. __atribut__((konstruktor)) zažene, ko se knjižnica v skupni rabi običajno naloži med zagonom programa. 2. __atribut__((destruktor)) zažene, ko se knjižnica v skupni rabi običajno razloži ob izhodu iz programa. 3. Dva oklepaja sta verjetno zato, da ju ločimo od funkcijskih klicev. 4. __atribut__ je sintaksa, specifična za GCC; ni funkcija ali makro. Koda voznika : 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 
Ustvari kviz