logo

__attribute__((constructor)) en __attribute__((destructor)) syntaxis in C

Schrijf twee functies in C met behulp van de GCC-compiler, waarvan er één wordt uitgevoerd vóór de hoofdfunctie en de andere wordt uitgevoerd na de hoofdfunctie. GCC-specifieke syntaxis : 1. __kenmerk__((constructor)) syntaxis: Deze specifieke GCC-syntaxis voert bij gebruik met een functie dezelfde functie uit bij het opstarten van het programma, dat wil zeggen voordat voornaamst() functie. 2. __kenmerk__((vernietiger)) syntaxis: Deze specifieke GCC-syntaxis voert bij gebruik met een functie dezelfde functie uit net voordat het programma eindigt via _exit, dat wil zeggen na voornaamst() functie. Uitleg : De manier waarop constructors en destructors werken is dat het gedeelde objectbestand speciale secties bevat (.ctors en .dtors op ELF) die verwijzingen bevatten naar de functies die respectievelijk zijn gemarkeerd met de constructor- en destructor-attributen. Wanneer de bibliotheek wordt geladen/ontladen, controleert het dynamische laadprogramma of dergelijke secties bestaan ​​en roept in dat geval de functies aan waarnaar daarin wordt verwezen. Enkele punten hierover zijn het vermelden waard: 1. __kenmerk__((constructor)) wordt uitgevoerd wanneer een gedeelde bibliotheek wordt geladen, meestal tijdens het opstarten van het programma. 2. __kenmerk__((vernietiger)) wordt uitgevoerd wanneer de gedeelde bibliotheek wordt verwijderd, meestal bij het afsluiten van het programma. 3. De twee haakjes zijn vermoedelijk bedoeld om ze te onderscheiden van functieaanroepen. 4. __attribuut__ is een GCC-specifieke syntaxis; geen functie of macro. Chauffeurscode : 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 
Quiz maken