Sintassi __attribute__((costruttore)) e __attribute__((distruttore)) in C

Scrivi due funzioni in C utilizzando il compilatore GCC, una delle quali viene eseguita prima della funzione principale e l'altra viene eseguita dopo la funzione principale. Sintassi specifiche del GCC : 1. __attributo__((costruttore)) sintassi: questa particolare sintassi GCC, quando utilizzata con una funzione, esegue la stessa funzione all'avvio del programma, cioè prima principale() funzione. 2. __attributo__((distruttore)) sintassi: questa particolare sintassi GCC, quando utilizzata con una funzione, esegue la stessa funzione appena prima che il programma termini tramite _exit, ovvero dopo principale() funzione. Spiegazione : Il modo in cui funzionano costruttori e distruttori è che il file oggetto condiviso contiene sezioni speciali (.ctors e .dtors su ELF) che contengono riferimenti alle funzioni contrassegnate rispettivamente con gli attributi costruttore e distruttore. Quando la libreria viene caricata/scaricata, il programma di caricamento dinamico controlla se tali sezioni esistono e in tal caso chiama le funzioni in esse referenziate. Al riguardo meritano di essere segnalati alcuni punti: 1. __attributo__((costruttore)) viene eseguito quando una libreria condivisa viene caricata, in genere durante l'avvio del programma. 2. __attributo__((distruttore)) viene eseguito quando la libreria condivisa viene scaricata, in genere all'uscita del programma. 3. Le due parentesi presumibilmente servono a distinguerle dalle chiamate di funzione. 4. __attributo__ è una sintassi specifica di GCC; non una funzione o una macro. Codice conducente : 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  
Crea quiz