Írjon két függvényt C nyelven a GCC fordítóval, amelyek közül az egyik a fő függvény előtt, a másik pedig a fő függvény után fut le. GCC-specifikus szintaxisok : 1. __attribútum__((konstruktor)) szintaxis: Ez az adott GCC szintaxis, ha egy függvénysel együtt használjuk, ugyanazt a funkciót hajtja végre a program indításakor, azaz azelőtt fő() funkció. 2. __attribútum__((pusztító)) szintaxis: Ez a bizonyos GCC-szintaxis, ha egy függvénnyel együtt használjuk, ugyanazt a funkciót hajtja végre közvetlenül a program befejezése előtt az _exit-en keresztül, azaz azután fő() funkció. Magyarázat : A konstruktorok és destruktorok működése az, hogy a megosztott objektumfájl speciális szakaszokat tartalmaz (.ctors és .dtors az ELF-en), amelyek hivatkozásokat tartalmaznak a konstruktor és destructor attribútumokkal megjelölt függvényekre. A könyvtár betöltésekor/kitöltésekor a dinamikus betöltő program ellenőrzi, hogy léteznek-e ilyen szakaszok, és ha igen, meghívja a benne hivatkozott függvényeket. Ezekkel kapcsolatban érdemes megjegyezni néhány pontot: 1. __attribútum__((konstruktor)) akkor fut, amikor egy megosztott könyvtár betöltődik, általában a program indításakor. 2. __attribútum__((pusztító)) akkor fut, amikor a megosztott könyvtárat általában a program kilépésekor ürítik ki. 3. A két zárójel feltehetően azért van, hogy megkülönböztesse őket a függvényhívásoktól. 4. __attribútum__ egy GCC-specifikus szintaxis; nem függvény vagy makró. Driver kód : 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
Kvíz létrehozása