Синтаксис __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  (  '  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  
Створіть вікторину