logo

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

Skriv to funktioner i C ved hjælp af GCC-kompiler, hvoraf den ene udføres før hovedfunktionen og den anden udføres efter hovedfunktionen. GCC-specifikke syntakser : 1. __attribut__((konstruktør)) syntaks : Denne særlige GCC-syntaks, når den bruges sammen med en funktion, udfører den samme funktion ved opstart af programmet, dvs. hoved() fungere. 2. __attribut__((destruktor)) syntaks: Denne særlige GCC-syntaks, når den bruges sammen med en funktion, udfører den samme funktion lige før programmet afsluttes gennem _exit, dvs. hoved() fungere. Forklaring : Den måde, konstruktører og destruktorer fungerer på, er, at den delte objektfil indeholder specielle sektioner (.ctors og .dtors på ELF), som indeholder referencer til de funktioner, der er markeret med henholdsvis constructor- og destructor-attributterne. Når biblioteket indlæses/aflæses, kontrollerer det dynamiske loader-program, om sådanne sektioner eksisterer, og kalder i så fald de funktioner, der henvises til deri. Nogle få punkter vedrørende disse er værd at bemærke: 1. __attribut__((konstruktør)) kører, når et delt bibliotek indlæses typisk under programstart. 2. __attribut__((destruktor)) kører, når det delte bibliotek udlæses typisk ved programafslutning. 3. De to parenteser er formodentlig for at skelne dem fra funktionskald. 4. __attribut__ er en GCC-specifik syntaks; ikke en funktion eller en makro. Driver kode : 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 
Opret quiz