Напишете две функции на C с помощта на GCC компилатор, едната от които се изпълнява преди основната функция, а другата се изпълнява след основната функция. Специфичен синтаксис на GCC : 1. __атрибут__((конструктор)) синтаксис : Този конкретен синтаксис на GCC, когато се използва с функция, изпълнява същата функция при стартиране на програмата, т.е. преди основен () функция. 2. __атрибут__((деструктор)) синтаксис: Този конкретен синтаксис на GCC, когато се използва с функция, изпълнява същата функция точно преди програмата да приключи чрез _exit, т.е. основен () функция. Обяснение : Начинът, по който работят конструкторите и деструкторите, е, че споделеният обектен файл съдържа специални раздели (.ctors и .dtors на ELF), които съдържат препратки към функциите, маркирани съответно с атрибутите на конструктора и деструктора. Когато библиотеката се зарежда/разтоварва, програмата за динамично зареждане проверява дали съществуват такива секции и ако е така, извиква функциите, посочени в тях. Заслужава да се отбележат няколко точки по отношение на тях: 1. __атрибут__((конструктор)) се изпълнява, когато споделена библиотека се зарежда обикновено по време на стартиране на програмата. 2. __атрибут__((деструктор)) се изпълнява, когато споделената библиотека се разтоварва обикновено при излизане от програмата. 3. Двете скоби вероятно са за разграничаване от извиквания на функции. 4. __атрибут__ е специфичен синтаксис на GCC; не е функция или макрос. Код на водача : 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
Създаване на тест