logo

Синтаксис __attribute__((constructor)) і __attribute__((destructor)) у C

Напишіть дві функції на C за допомогою компілятора GCC, одна з яких виконується перед основною функцією, а інша — після основної функції. Специфічний синтаксис GCC : 1. __attribute__((конструктор)) синтаксис : цей конкретний синтаксис GCC при використанні з функцією виконує ту саму функцію під час запуску програми, тобто перед головний() функція. 2. __attribute__((деструктор)) синтаксис : цей конкретний синтаксис GCC при використанні з функцією виконує ту саму функцію безпосередньо перед завершенням програми через _exit, тобто після головний() функція. Пояснення : Принцип роботи конструкторів і деструкторів полягає в тому, що спільний об’єктний файл містить спеціальні розділи (.ctors і .dtors на ELF), які містять посилання на функції, позначені атрибутами constructor і destructor відповідно. Коли бібліотека завантажується/вивантажується, програма динамічного завантаження перевіряє, чи існують такі розділи, і, якщо так, викликає функції, на які в них є посилання. З цього приводу варто звернути увагу на кілька моментів: 1. __attribute__((конструктор)) запускається, коли спільна бібліотека завантажується зазвичай під час запуску програми. 2. __attribute__((деструктор)) запускається, коли спільна бібліотека зазвичай вивантажується під час виходу з програми. 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 
Створіть вікторину