logo

Syntaxe __attribute__((konstruktor)) a __attribute__((destruktor)) v jazyce C

Napište dvě funkce v C pomocí kompilátoru GCC, z nichž jedna se provádí před hlavní funkcí a druhá se provádí za hlavní funkcí. Syntaxe specifické pro GCC : 1. __attribute__((konstruktor)) syntaxe : Tato konkrétní syntaxe GCC při použití s ​​funkcí provádí stejnou funkci při spuštění programu, tj. hlavní() funkce. 2. __attribute__((destruktor)) syntaxe : Tato konkrétní syntaxe GCC při použití s ​​funkcí provede stejnou funkci těsně před ukončením programu přes _exit, tj. hlavní() funkce. Vysvětlení : Konstruktory a destruktory fungují tak, že sdílený objektový soubor obsahuje speciální sekce (.ctors a .dtors na ELF), které obsahují odkazy na funkce označené atributem konstruktor a destruktor. Když je knihovna načtena/uvolněna, program dynamického zavaděče zkontroluje, zda takové sekce existují, a pokud ano, zavolá funkce v nich uvedené. Za zmínku stojí několik bodů týkajících se těchto věcí: 1. __attribute__((konstruktor)) běží, když je sdílená knihovna načtena obvykle během spouštění programu. 2. __attribute__((destruktor)) spustí se, když je sdílená knihovna uvolněna, obvykle při ukončení programu. 3. Dvě závorky je pravděpodobně odlišují od volání funkcí. 4. __atribut__ je syntaxe specifická pro GCC; ne funkce nebo makro. Kód řidiče : 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 
Vytvořit kvíz