logo

Sintaxele __attribute__((constructor)) și __attribute__((destructor)) în C

Scrieți două funcții în C folosind compilatorul GCC, dintre care una se execută înainte de funcția principală și alta se execută după funcția principală. Sintaxe specifice GCC : 1. __atribut__((constructor)) sintaxă: această sintaxă specială GCC atunci când este utilizată cu o funcție execută aceeași funcție la pornirea programului, adică înainte principal() funcţie. 2. __atribut__((destructor)) sintaxă: această sintaxă GCC specială atunci când este utilizată cu o funcție execută aceeași funcție chiar înainte ca programul să se încheie prin _exit, adică după principal() funcţie. Explicaţie : Modul în care lucrează constructorii și destructorii este că fișierul obiect partajat conține secțiuni speciale (.ctors și .dtors pe ELF) care conțin referințe la funcțiile marcate cu atributele constructor și respectiv destructor. Când biblioteca este încărcată/descărcată, programul de încărcare dinamic verifică dacă există astfel de secțiuni și, dacă da, apelează funcțiile la care se face referire în acestea. Câteva puncte despre acestea merită remarcate: 1. __atribut__((constructor)) rulează atunci când o bibliotecă partajată este încărcată de obicei în timpul pornirii programului. 2. __atribut__((destructor)) rulează atunci când biblioteca partajată este descărcată de obicei la ieșirea din program. 3. Cele două paranteze sunt probabil pentru a le distinge de apelurile de funcții. 4. __atribut__ este o sintaxă specifică GCC; nu o funcție sau o macrocomandă. Cod șofer : 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 
Creați un test