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  (  '  n  I am in main'  );   }   // This function is assigned to execute before   // main using __attribute__((constructor))   void     calledFirst  ()   {      printf  (  '  n  I am called first'  );   }   // This function is assigned to execute after   // main using __attribute__((destructor))   void     calledLast  ()   {      printf  (  '  n  I am called last'  );   }   
Output:
I am called first I am in main I am called last  
Vytvořit kvíz