Ierakstiet divas funkcijas C valodā, izmantojot GCC kompilatoru, no kuriem viens tiek izpildīts pirms galvenās funkcijas, bet otrs tiek izpildīts pēc galvenās funkcijas. GCC specifiskās sintakses : 1. __atribūts__((konstruktors)) sintakse: šī konkrētā GCC sintakse, ja to lieto kopā ar funkciju, izpilda to pašu funkciju programmas startēšanas laikā, t.i., pirms galvenais () funkciju. 2. __atribūts__((iznīcinātājs)) sintakse: šī konkrētā GCC sintakse, ja to lieto kopā ar funkciju, izpilda to pašu funkciju tieši pirms programmas pabeigšanas, izmantojot _exit, t.i., pēc galvenais () funkciju. Paskaidrojums : Konstruktoru un destruktoru darbības veids ir tāds, ka koplietojamā objekta failā ir īpašas sadaļas (.ctors un .dtors uz ELF), kurās ir atsauces uz funkcijām, kas attiecīgi atzīmētas ar konstruktora un destruktora atribūtiem. Kad bibliotēka tiek ielādēta/izlādēta, dinamiskā ielādētāja programma pārbauda, vai šādas sadaļas pastāv, un, ja tā, izsauc tajā norādītās funkcijas. Šeit ir vērts atzīmēt dažus punktus: 1. __atribūts__((konstruktors)) darbojas, kad parasti programmas startēšanas laikā tiek ielādēta koplietojama bibliotēka. 2. __atribūts__((iznīcinātājs)) darbojas, kad koplietotā bibliotēka parasti tiek izlādēta programmas iziešanas brīdī. 3. Abas iekavas, iespējams, ir paredzētas, lai tās atšķirtu no funkciju izsaukumiem. 4. __atribūts__ ir GCC specifiska sintakse; nav funkcija vai makro. Vadītāja kods : 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
Izveidojiet viktorīnu