logo

__attribute__((konstruktør)) og __attribute__((destructor)) syntakser i C

Skriv to funksjoner i C ved å bruke GCC-kompilatoren, hvorav den ene kjøres før hovedfunksjonen og den andre kjøres etter hovedfunksjonen. GCC-spesifikke syntakser : 1. __attribute__((konstruktør)) syntaks : Denne spesielle GCC-syntaksen når den brukes med en funksjon utfører den samme funksjonen ved oppstart av programmet, dvs. før hoved() funksjon. 2. __attribute__((destruktor)) syntaks: Denne spesielle GCC-syntaksen når den brukes med en funksjon, utfører den samme funksjonen rett før programmet avsluttes gjennom _exit, dvs. etter hoved() funksjon. Forklaring : Måten konstruktører og destruktorer fungerer på er at den delte objektfilen inneholder spesielle seksjoner (.ctors og .dtors på ELF) som inneholder referanser til funksjonene merket med henholdsvis konstruktør- og destruktorattributtene. Når biblioteket er lastet/utlastet, sjekker det dynamiske lasterprogrammet om slike seksjoner eksisterer og kaller i så fall opp funksjonene som er referert til der. Noen få punkter angående disse er verdt å merke seg: 1. __attribute__((konstruktør)) kjører når et delt bibliotek lastes vanligvis under programoppstart. 2. __attribute__((destruktor)) kjører når det delte biblioteket er lastet ut, vanligvis ved programavslutning. 3. De to parentesene er antagelig for å skille dem fra funksjonskall. 4. __attributt__ er en GCC-spesifikk syntaks; ikke en funksjon eller en makro. Førerkode : 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 
Lag quiz