logo

__attribut__((konstruktor)) och __attribut__((destructor)) syntaxer i C

Skriv två funktioner i C med GCC-kompilatorn, varav den ena körs före huvudfunktionen och den andra körs efter huvudfunktionen. GCC-specifika syntaxer : 1. __attribut__((konstruktör)) syntax : Denna speciella GCC-syntax när den används med en funktion utför samma funktion vid starten av programmet, dvs. main() fungera. 2. __attribute__((förstörare)) syntax: Denna speciella GCC-syntax när den används med en funktion kör samma funktion precis innan programmet avslutas genom _exit, dvs. main() fungera. Förklaring : Sättet som konstruktörer och destruktörer fungerar på är att den delade objektfilen innehåller speciella sektioner (.ctors och .dtors på ELF) som innehåller referenser till de funktioner som är markerade med constructor- respektive destructor-attributen. När biblioteket laddas/avlastas kontrollerar det dynamiska laddningsprogrammet om sådana sektioner finns och anropar i så fall de funktioner som refereras däri. Några punkter angående dessa är värda att notera: 1. __attribut__((konstruktör)) körs när ett delat bibliotek laddas vanligtvis under programstart. 2. __attribute__((förstörare)) körs när det delade biblioteket töms vanligtvis vid programavslut. 3. De två parenteserna är förmodligen för att skilja dem från funktionsanrop. 4. __attribut__ är en GCC-specifik syntax, inte en funktion eller ett makro. Förarens kod : 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 
Skapa frågesport